2015-05-01 81 views
0

我有以下簡單的選擇:的Android選擇自定義視圖中不工作

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/main_menu_button_background_pressed" android:state_pressed="true" /> 
    <item android:drawable="@drawable/main_menu_button_background" /> 
</selector> 

和以下活動的XML:

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#FF0000" 
    android:weightSum="2"> 


    <Button 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:text="settings" 
     android:id="@+id/btnMainMenuSettings" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/main_menu_button_selector" 
     android:layout_weight="1" /> 

    <com.test.myapp.custom_views.CustomMainMenuButton 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:text="settings" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/main_menu_button_selector" 
     android:layout_weight="1" /> 
</LinearLayout> 

這是我的自定義視圖:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_gravity="center" 
    android:gravity="center"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     style="@style/main_menu_button" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:text="@string/app_name" /> 
</LinearLayout> 

這裏是java代碼:

public class CustomMainMenuButton extends LinearLayout implements View.OnClickListener { 

    private Context mContext; 

    public CustomMainMenuButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mContext = context; 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     inflater.inflate(R.layout.custom_main_menu_button, this, true); 
    } 

    @Override 
    public void onClick(View v) { 

    } 
} 

選擇器對按鈕正常工作,但對於自定義視圖,我只獲得正常狀態,自定義視圖不可點擊,並且在點按自定義視圖時沒有任何反應。任何想法我怎麼能使它工作?

回答

3

您的佈局是無法點擊,這是默認狀態爲所有佈局。使用 setClickable(true)自定義視圖實現或XML佈局android:clickable="true"

你應該得到的東西,如:

<com.test.myapp.custom_views.CustomMainMenuButton 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:clickable="true" 
    android:text="settings" 
    android:layout_gravity="center_horizontal" 
    android:background="@drawable/main_menu_button_selector" 
    android:layout_weight="1" /> 
+0

謝謝大家。這一個伎倆。 – dsb

2

嘗試改變選擇爲:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/main_menu_button_background_pressed" android:state_pressed="true"></item> 
    <item android:drawable="@drawable/main_menu_button_background_pressed" android:state_focused="true"></item> 
    <item android:drawable="@drawable/main_menu_button_background" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item> 
    <item android:drawable="@drawable/main_menu_button_background_pressed" android:state_enabled="false"></item> 
</selector> 
+0

謝謝添加android:clickable="true"!我的選擇器突然停止工作(可能在我改變了一些東西但不知道是什麼)之後,我嘗試了所有可以在這裏找到的解決方案,並且最終做到了。 再次感謝 –

1

<com.test.myapp.custom_views.CustomMainMenuButton 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:text="settings" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/main_menu_button_selector" 
     android:layout_weight="1" /> 
相關問題