0

我正在尝试使用他们的音频捕获示例代码中的一些谷歌代码。他们简化了代码,并在课堂上进行了布局。我想要一个实际的 xml 布局。我知道如何做那部分,但我想知道如何将下面的代码更改为 onClick 方法并拥有它提供的所有功能。

class PlayButton extends Button {      
    boolean mStartPlaying = true;   
    OnClickListener clicker = new OnClickListener() {  
        public void onClick(View v) {          
            onPlay(mStartPlaying);            
            if (mStartPlaying) {              
                setText("Stop playing");        
            } else {              
                setText("Start playing");     
            }          
            mStartPlaying = !mStartPlaying;      
        }      
    };      

    public PlayButton(Context ctx) {   
        super(ctx);           
        setText("Start playing");      
        setOnClickListener(clicker);    
    }   
}

任何帮助表示赞赏。

4

3 回答 3

1

在布局文件中,您将拥有类似...

<LinearLayout>
   <Button android:id="play_button"/>
</LinearLayout>

在活动中,onCreate(),然后您可以执行类似..

OnClickListener clicker = new OnClickListener() {  
    public void onClick(View v) {          
        onPlay(mStartPlaying);            
        if (mStartPlaying) {              
            setText("Stop playing");        
        } else {              
            setText("Start playing");     
        }          
        mStartPlaying = !mStartPlaying;      
    }      
};      
Button b = findViewById(R.id.play_button);
b.setOnClickListener(clicker);

或者,您还可以在 xml 布局中定义将在Activity...中调用的方法

<LinearLayout>
   <Button android:id="play_button" onclick="play"/>
</LinearLayout>

然后在Activity你简单地创建一个方法,称为play(View view)

public void play(View view) {
            onPlay(mStartPlaying);            
            if (mStartPlaying) {              
                setText("Stop playing");        
            } else {              
                setText("Start playing");     
            }          
            mStartPlaying = !mStartPlaying;      
}
于 2012-06-05T18:03:46.010 回答
1

只需将按钮定义为Button并将布尔值声明为Activity变量。例子...

public class AudioRecordTest extends Activity {
    ...
    private Button mPlayButton = null;
    private boolean mStartPlaying = true;
    // Do the same for mRecordButton and mStartRecording
    ...

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        // The next line assumes the play button has the id "@+id/play_button"
        mPlayButton = (Button)findViewById(R.id.play_button);
        mPlayButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                onPlay(mStartPlaying);            
                if (mStartPlaying) {
                    ((Button)v).setText("Stop playing");
                } else {
                    ((Button)v).setText("Start playing");
                }
                mStartPlaying = !mStartPlaying;
            }
        });

        // Do the same for the mRecordButton
    }
}
于 2012-06-05T18:10:57.683 回答
0

扩展按钮只是为了设置一个 onClickListener 不是一个好主意。仅当您要为其添加新功能时,才应扩展某些内容。当您将其用于不需要额外功能的特定目的时,则不会。

Button button = new Button(this);
button.setOnClickListener(...);

如果您需要使用 XML,您可以使用 LayoutInflater 以编程方式加载它。

您的布尔值 isPlaying 不是按钮本身的属性,而是它正在播放的媒体的属性。您不应将其隐藏在按钮内。

于 2012-06-05T18:02:55.980 回答