2017-09-07 237 views
0

我有兩個文本視圖,其背景圖像要更改。將狀態設置爲默認按鈕

<TextView 
      android:layout_width="@dimen/margin_0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:layout_margin="@dimen/margin_padding_2dp" 
      android:padding="@dimen/margin_padding_5dp" 
      android:text="Trainings" 
      android:gravity="center" 
      android:textSize="17sp" 
      android:background="@drawable/background_selector" 
      android:clickable="true" 
      /> 
     <TextView 
      android:id="@+id/learning_programs" 
      android:layout_width="@dimen/margin_0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.5" 
      android:text="Learning Programs" 
      android:padding="@dimen/margin_padding_5dp" 
      android:textSize="@dimen/text_size_seventeen" 
      android:background="@drawable/background_selector" 
      android:gravity="center" 
      android:clickable="true" 
      /> 

所以,我想要的是,當我點擊一個TextView的背景圖像應該改變。對於這一點,我在可拉伸的選擇器作爲

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/rounded_corner" android:state_pressed="true"/> 
    <item android:drawable="@drawable/rounded_corner" android:state_focused="true"/> 

    <item android:drawable="@drawable/rounded_corner_grey"/> 
</selector> 

但是與上面的代碼的問題是,只有當用戶點按TextView的它保留了白色。一旦用戶的手指移動,顏色將變爲灰色。

我想要的是,用戶點擊一次TextView後,顏色應該變成白色。

隨着state_selected:true兩個TextViews變白並且不可點擊。

回答

1

將這行代碼添加到textviews中。

機器人:focusableInTouchMode =「真」

這意味着該視圖可以得到焦點,當手機處於觸摸模式。

編輯: 試試這個xml並檢查它是否有效。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="@dimen/margin_0dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/margin_padding_2dp" 
    android:layout_weight="0.5" 
    android:background="@drawable/background_selector" 
    android:clickable="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:gravity="center" 
    android:padding="@dimen/margin_padding_5dp" 
    android:text="Trainings" 
    android:textSize="17sp" /> 

<TextView 
    android:id="@+id/learning_programs" 
    android:layout_width="@dimen/margin_0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" 
    android:background="@drawable/background_selector" 
    android:clickable="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:gravity="center" 
    android:padding="@dimen/margin_padding_5dp" 
    android:text="Learning Programs" 
    android:textSize="@dimen/text_size_seventeen" /> 

+0

仍然無法正常工作! – Aayushi

+0

它應該工作。我已將您的代碼複製到我的工作室並檢查了夥計。 – Anonymous

+0

不,它不是。我也在嘗試同樣的事情。 – Aayushi

0

在我的情況,我用這個:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:color="@color/bottom_nav_normal" android:state_enabled="true"/> 
     <item android:color="@color/bottom_nav_checked" android:state_enabled="false"/> 
     <item android:color="@color/bottom_nav_checked" android:state_pressed="true"/> 
    </selector> 

然後,在代碼:

TextView tv = (TextView)findViewById(R.id.tv); 
tv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //TODO 
      tv.setEnable(false); 
     } 
    } 
+0

我有兩個textViews,所以我想要一個廣義的代碼 – Aayushi

+0

我認爲你應該編寫自定義視圖更有效 –

1

當從看你的手指釋放,你的觀點是不在selectedpressed狀態。點擊事件後,您需要手動設置pressedselected狀態。

<TextView 
    android:id="@+id/sample_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:background="@drawable/background_selector" 
    android:text="Hello World!" /> 

然後在你的代碼

TextView tv = (TextView) findViewById(R.id.sample_text); 
tv.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setSelected(!v.isSelected()); 
    } 
}); 

您可以使用一個OnClickListener兩個TextView

private View.OnClickListener toggleSelectedStateOnClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setSelected(!v.isSelected()); 
    } 
}; 

TextView tv = (TextView) findViewById(R.id.sample_text); 
tv.setOnClickListener(toggleSelectedStateOnClickListener); 

TextView tv1 = new TextView(this); 
tv1.setOnClickListener(toggleSelectedStateOnClickListener); 
+0

我有兩個TextViews,我該如何使這種廣義? – Aayushi

+0

@Aayushi查看編輯答案。 – alijandro

+0

通過此代碼,我可以同時選擇兩個textViews。有沒有辦法一次選擇一個,如果我選擇另一種方式,第一個會自動取消選擇? – Aayushi