活动重新启动时Android自定义按钮消失
我在活动中有一个自定义按钮。它很好用。我回击,然后重新启动活动,按钮不见了。我创建了一个剥离项目来说明问题所在 应用程序以此活动启动(仅一个启动Activity2的按钮): Activity2只有一个按钮活动重新启动时Android自定义按钮消失,android,button,android-activity,custom-controls,Android,Button,Android Activity,Custom Controls,我在活动中有一个自定义按钮。它很好用。我回击,然后重新启动活动,按钮不见了。我创建了一个剥离项目来说明问题所在 应用程序以此活动启动(仅一个启动Activity2的按钮): Activity2只有一个按钮 <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/menu_left_button" />
现在再试一次
public class TestCustomButtonActivity extends Activity {
/** Called when the activity is first created. */
private static Button btn1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(TestCustomButtonActivity.this, Activity2.class);
startActivity(intent);
}
});
}
}
几个月后,你可以看到,我偶然找到了答案。它作为另一个stackoverflow问题的答案发布:。我现在知道的实际问题是图像“button\u left\u normal”没有显示,因为它是按字母顺序排列的第一个图像。如果按钮有一个固定的大小,而不是“包装内容”作为尺寸,我将能够点击它,并看到“按钮左按”显示没有任何问题。我希望这对其他人有所帮助。android设置:
constantSize=“false”
对我有帮助
因此,您的代码将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="false">
<item android:state_pressed="true"
android:drawable="@drawable/button_left_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_left_hovered" /> <!-- focused -->
<item android:drawable="@drawable/button_left_normal" /> <!-- default -->
</selector>
活动2的代码在哪里?发布。同时添加activity2的代码。发布activity2代码并将按钮ID更改为button1和button2。按钮2是在活动2中消失的一个。我尝试了很多东西,但仍然不起作用。将api级别更改为7,没有更改。又添加了一个执行以下操作的按钮:(a)btn2.invalidate(),无任何内容。(b) btn2.setBackgroundResource(R.drawable.menu\u left\u按钮),仍然是空的。尺寸从50x50变为19x0,没有任何理由变为19x0,也没有任何其他随机值。在尝试了所有可能的解决方案后,我提出了这个解决方案,虽然不完全令人满意,但可以完成工作。我使用eclipse向导(topleftbutton.xml)创建了一个新的xml选择器。在其中复制了我以前的选择器(menu_left_button.xml)的内容,没有做任何更改。它现在运行良好。但我还是想知道为什么。试图将menu_left_button.xml复制到一个没有下划线的新文件中,但无效。它必须是由eclipse向导创建的文件。所以这一定是巫师做的,我没有做的。这并不能解决问题,尽管我不得不承认我在这个项目中有2个button1 ID,这至少让人困惑。现在更正它。问题不在这个“button1”,而是在另一个“button1”,现在是button2。也解决了我的问题。在安卓2.2设备上,我没有问题。在Android 4.x Nexus 7上测试时,我遇到了使用constantSize=“true”的选择器问题,导致ImageButton的大小减小到0,0。带有constantSize=“true”选择器的初始设计时后台分配工作正常,但通过SetBackgroundResource()或SetBackgroundDrawable()编程设置会导致ImageButton大小为0,0。
public class Activity2 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
}
}
public class TestCustomButtonActivity extends Activity {
/** Called when the activity is first created. */
private static Button btn1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(TestCustomButtonActivity.this, Activity2.class);
startActivity(intent);
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="false">
<item android:state_pressed="true"
android:drawable="@drawable/button_left_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_left_hovered" /> <!-- focused -->
<item android:drawable="@drawable/button_left_normal" /> <!-- default -->
</selector>