可以动态更改最初在xml中设置的android id和onClick标记吗?
是否可以动态更改id和onClick标记可以动态更改最初在xml中设置的android id和onClick标记吗?,android,audio,Android,Audio,是否可以动态更改id和onClick标记 <Button android:id="@+id/actionAudio" android:text="{faw-microphone}" android:layout_weight = "2" android:layout_width="80dp" android:layout_height="60dp" android:onClick="on
<Button
android:id="@+id/actionAudio"
android:text="{faw-microphone}"
android:layout_weight = "2"
android:layout_width="80dp"
android:layout_height="60dp"
android:onClick="onRecordAudio" />
例如,我正在尝试录制一段音频,单击带有id和onClick标记的单个按钮。该按钮也将用作停止按钮。为了能够做到这一点,我正在考虑动态地更改这些标记以直观地操作它,以及onclick事件
这种方法行吗,或者有更好的方法来做这件事。非常感谢 您可以使用此方法设置任何
视图的Id
yourView.setId(int);
然后像这样点击listener
View v = findViewById(id);
v.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
我了解您的情况,因为我两天前刚刚实现了录音和播放音频功能,但是我的回答并不能解决您的问题,但与您的方法相比,它是一种更好、更干净的方法
在xml中创建两个不同的按钮,一个用于记录,另一个用于停止
为onClick指定两种不同的方法
隐藏其中一个按钮,并根据代码中的用户单击事件显示另一个按钮(即相应地更改可见性)
这样,您的逻辑就完全解耦和分离了,您不必在按钮图像、单击事件检查等之间切换
- 当用户按下记录时,将调用其注册的onClick方法,通过设置可见性(View.go)
隐藏方法中单击的按钮,并通过设置可见性(View.visible)使停止按钮再次可见,反之亦然
切换按钮也可以为您完成任务,但稍后当您决定添加新按钮(如播放、暂停声音)时,上述方法将非常适合您。您可以通过多种方式完成此操作,但简单的解决方案是使用切换按钮而不是普通按钮
<ToggleButton
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="60dp"
android:layout_marginTop="18dp"
android:text="ToggleButton1"
android:textOn="Record"
android:textOff="Stop" />
希望这对你有帮助
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button button;
boolean f=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
// code
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button:
if(f) {
button.setText("Stop");
f=false;
// your code
}else{
Toast.makeText(this, "Stroped", Toast.LENGTH_SHORT).show();
button.setText("Activate");
f=true;
}
}
}
使用if/else执行此操作的最简单方法
您不需要重置id
别忘了实现View.OnClickListner,还有一种方法可以做到这一点
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
if (((String) v.getTag()) != null && ((String) v.getTag()).equalsIgnoreCase("STOP")) {
v.setTag("START");
// start
// you can also use boolean like v.setTag(true)
} else {
v.setTag("STOP");
// stop
}
}
});
为什么不使用toogle按钮而不是button,您可以在其onClick()中检查isChecked()?非常感谢您的提示:)这就是我决定使用的。最受欢迎的是,您知道吗,使用这种方法,您可以稍后添加其他按钮(如果您愿意),而不破坏代码,例如播放声音,暂停以暂停声音。每个按钮都有自己的方法,不会出现依赖性问题。祝你好运…谢谢你,我直到现在才知道切换按钮。我肯定会将其用于其他用例。我继续使用设置可见性的方法。:)
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
if (((String) v.getTag()) != null && ((String) v.getTag()).equalsIgnoreCase("STOP")) {
v.setTag("START");
// start
// you can also use boolean like v.setTag(true)
} else {
v.setTag("STOP");
// stop
}
}
});