2011-11-16 158 views
0

我在活動中有一個自定義按鈕。它工作正常。我打回來,然後重新開始活動,並且按鈕不見了。我創建了一個剝離的項目來展示問題所在。當活動重新啓動時,Android自定義按鈕消失

應用啓動與此活性(剛啓動活性2按鈕):

public class TestCustomButtonActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button 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); 
       } 
     }); 
    } 
} 

活性2只有一個按鍵

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/menu_left_button" /> 

menu_left_button是XML選擇器:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
      android:constantSize="true"> 
    <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> 

這就是它的全部。您啓動該應用程序並點擊button1,並且您將看到Activity2和我們的自定義按鈕。它工作正常。但是,如果你點擊後退按鈕(關閉Activity2)並再次點擊button1,我們的自定義按鈕就不存在了!它消失了。有什麼好的理由呢?

目標API級別是4(如果這與它有關)。

活性2碼幾乎是空的:

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); 
    } 
} 
+0

在哪裏活動2碼?發表它。 – user370305

+0

也添加activity2的代碼。 – Shaireen

+0

發佈了Activity2代碼並將按鈕的ID更改爲button1和button2。 button2是在Activity2中消失的人。 – cdriver

回答

0

經過幾個月,你可以看到,我偶然發現了答案。它在另一個stackoverflow問題中作爲答案發布:ImageButton does not display a particular drawable。現在我知道的實際問題是,圖像「button_left_normal」不顯示,因爲它是按字母順序排列的第一個圖像。如果按鈕的尺寸固定,而不是「wrap_content」尺寸,我可以點擊它,看到「button_left_pressed」顯示沒有任何問題。我希望這可以幫助那裏的人。

0

現在再次嘗試。

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); 
       } 
     }); 
    } 
} 
+0

這不是解決問題,但我不得不承認,我在這個項目中有2個button1標識符,至少令人困惑。現在糾正它。問題不在於此「button1」,而在於另一個「button1」,現在是button2。 – cdriver

1

設定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> 
+0

解決了我的問題。在Android 2.2設備上我沒有問題。在Android 4.x Nexus 7上測試我遇到了使用constantSize =「true」的選擇器導致ImageButton縮小到0,0的問題。使用具有constantSize =「true」的選擇器的初始設計時背景賦值工作正常,但通過SetBackgroundResource()或SetBackgroundDrawable()以編程方式設置將導致ImageButton的大小爲0,0。 – t9mike

相關問題