2017-12-18 205 views
0

我嘗試使用三元運算符來更改按鈕的文本顏色。 類似的東西:這裏是xml。數據綁定設置顏色

<Button 
    android:id="@+id/actionButton" 
    android:layout_width="113dp" 
    android:layout_height="30dp" 
    android:background="@drawable/button" 
    android:backgroundTint="@{selected ? R.color.white : R.color.turquoise}" 
    android:text="@{selected ? &quot;Selected &quot; : &quot;Select &quot;}" 
    android:textColor="@{selected ? @color/white : @color/turquoise}" 
    android:onClick="@{(view) -> handler.selectClick(view)}"/> 

但顏色設置不正確。我得到一些奇怪的紫色顏色。

我試圖

<import type="com.myapp.R" /> 
android:textColor="@{selected ? R.color.white : R.color.turquoise}" 

具有相同的結果。
我應該怎麼做?

+0

你綠松石色喲檢查你設置正確的顏色代碼? –

+0

是的。顏色很好。 android:textColor =「@ color/turquoise」根據需要工作 – Shmuel

回答

0

您的第一個變體應該可以正常工作。您可以參考this doc的「資源」一章。 這是一個完整的工作示例。

colors.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    ... 
    <color name="foo">#fff</color> 
    <color name="bar">#000</color> 
</resources> 

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 
     <variable name="selected" type="boolean" /> 
     <variable name="button2" type="String" /> 
    </data> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btn_a" 
      android:onClick="switchColor" 
      android:text="Click me"/> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btn_b" 
      android:textColor="@{selected ? @color/foo : @color/bar}" 
      android:text="@{button2}"/> 

    </LinearLayout> 
</layout> 

ActivityMain.class

public class ActivityMain extends AppCompatActivity { 

    public static final String TAG = "MainActivity"; 

    MainActivityBinding mBinding; 
    boolean mSelected; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mBinding = DataBindingUtil.setContentView(this, R.layout.main_activity); 
     mBinding.setButton2("Don't click me please!"); 
    } 

    public void switchColor(View view) { 
     mBinding.setSelected(mSelected = !mSelected); 
    } 
}