2012-09-18 3 views
4

btn_presses, btn_focus 등과 같은 다른 상태에서 버튼 텍스트 색상을 변경하고 싶습니다.android에서 colorstatelist를 사용하는 방법

그 때문에 colorstatelist.xml을 사용하고 titlebarlayout.xml의 버튼 텍스트로 다시 그려 냈습니다. 하지만 여전히 버튼의 텍스트 색상을 변경할 수 없습니다.

누구나 할 수있는 방법을 알고 있습니다. 코드 어디서나 잘못 될 것입니다.

MainActivity.java

public class MainActivity extends Activity implements OnClickListener { 

     EditText emailEdit, passwordEdit; 
     Button loginButton; 
     String email, password; 
     TitleBarLayout titlebarLayout; 
     String r; 
     String rr; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.login_activity); 

      emailEdit = (EditText) findViewById(R.id.etEmail); 
      passwordEdit = (EditText) findViewById(R.id.etPassword); 

      loginButton = (Button) findViewById(R.id.loginButton); 
      loginButton.setOnClickListener(this); 

      // titlebarLayout=(TitleBarLayout) findViewById(R.id.titlebar); 
      titlebarLayout = new TitleBarLayout(MainActivity.this); 
      titlebarLayout.setLeftButtonText(""); 
      titlebarLayout.setRightButtonText("Logout"); 
      titlebarLayout.setTitle("iProtect"); 
      //titlebarLayout.setLeftButtonSize(50,50); 
      //titlebarLayout.setRightButtonSize(100,50); 
      titlebarLayout.setLeftButtonBackgroundColor(Color.rgb(34,49,64)); 
      titlebarLayout.setRightButtonBackgroundColor(Color.rgb(34,49,64)); 
      titlebarLayout.setLeftButtonTextColor(Color.rgb(255,255,255)); 
      titlebarLayout.setRightButtonTextColor(Color.rgb(255,255,255)); 


      XmlResourceParser parser =getResources().getXml(R.color.colorstatelist); 

       ColorStateList colorStateList; 
       try { 
        colorStateList = ColorStateList.createFromXml(getResources(), parser); 

        titlebarLayout.setLeftButtonTextColor(colorStateList); 
       } catch (XmlPullParserException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
    //  ColorStateList colorlist=new ColorStateList(new int[][] { new int[] { android.R.attr.state_focused }, new int[0], }, new int[] { Color.rgb(0, 0, 255), Color.BLACK, }); 
    //  titlebarLayout.setLeftButtonTextColor(colorlist); 


      OnClickListener listener = new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        if (v.getId() == R.id.left_button) { 

        } else if (v.getId() == R.id.right_button) { 

        } 
       } 
      }; 
      titlebarLayout.setLeftButtonOnClickListener(listener); 
      titlebarLayout.setRightButtonOnClickListener(listener); 
     } 

TitleBarLayout.java

public class TitleBarLayout { 

    private Activity activityRef; 
    private View contentView; 
    private Button leftButton, rightButton; 
    TextView titletext; 

    public TitleBarLayout(Activity a) { 
     Log.i("TitleBar Layout", "Inside constructor"); 
     activityRef = a; 
     inflateViewsFromXml(); 
     setListenersOnViews(); 
     setValuesOnViews(); 
    } 

    private void setValuesOnViews() { 
     leftButton.setText(""); 
     rightButton.setText(""); 
    } 

    private void setListenersOnViews() { 
     leftButton.setOnClickListener(listener); 
     rightButton.setOnClickListener(listener); 
    } 

    private final OnClickListener listener = (new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      activityRef.finish(); 
     } 
    }); 

    private void inflateViewsFromXml() { 
     contentView = activityRef.findViewById(R.id.titlebar); 
     rightButton = (Button) contentView.findViewById(R.id.right_button); 
     leftButton = (Button) contentView.findViewById(R.id.left_button); 
     titletext = (TextView) contentView.findViewById(R.id.title_textview); 
    } 

    public void setLeftButtonText(int resID) { 
     leftButton.setText(resID); 
    } 

    public void setLeftButtonText(String text) { 
     leftButton.setText(text); 
    } 

    public void setLeftButtonOnClickListener(View.OnClickListener listener) { 
     leftButton.setOnClickListener(listener); 
    } 

    public void setRightButtonText(int resID) { 
     rightButton.setText(resID); 
    } 

    public void setRightButtonText(String text) { 
     rightButton.setText(text); 
    } 

    public void setRightButtonOnClickListener(View.OnClickListener listener) { 
     rightButton.setOnClickListener(listener); 
    } 

    public void setTitle(int resID) { 
     titletext.setText("" + resID); 
    } 

    public void setTitle(String text) { 
     titletext.setText(text); 
    } 

    public void setLeftButtonSize(int width, int height) { 
     Log.i("Button" ,"Width"+width); 
     leftButton.setWidth(width); 
     leftButton.setHeight(height); 
    } 

    public void setRightButtonSize(int width, int height) { 

     Log.i("Button" ,"Width"+width); 
     rightButton.setWidth(width); 
     rightButton.setHeight(height); 
    } 

    public void setLeftButtonBackgroundResource(int backgroundResource) { 

    } 

    public void setRightButtonBackgroundResource(int backgroundResource) { 

    } 

    public void setLeftButtonBackgroundColor(int backgroundColor) { 
     Log.i("Button" ,"COLOR"+backgroundColor); 
     leftButton.setBackgroundColor(backgroundColor); 
    } 

    public void setRightButtonBackgroundColor(int backgroundColor) { 
     Log.i("Button" ,"COLOR"+backgroundColor); 
     rightButton.setBackgroundColor(backgroundColor); 
    } 

    public void setLeftButtonTextColor(int textcolor) { 
     Log.i("Button" ,"COLOR"+textcolor); 
     leftButton.setTextColor(textcolor); 
    } 

    public void setRightButtonTextColor(int textcolor) { 
     Log.i("Button" ,"COLOR"+textcolor); 
     rightButton.setTextColor(textcolor); 
    } 

    public void setLeftButtonTextColor(ColorStateList colorStateList) { 
     leftButton.setTextColor(colorStateList); 

    } 

    public void setRightButtonTextColor(ColorStateList colorStateList) { 

    } 
} 

color.xml

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

    <color name="title_bg_color">#2e4256</color> 
    <color name="layout_bg_color">#dcdcdc</color> 
    <color name="state_pressed">#ffffff</color> 
    <color name="state_selected">#00ff00</color> 
    <color name="state_focused">#0000ff</color> 

</resources> 

titlebarlayout.xml

<?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="@dimen/titlebar_height" 
    android:background="@color/title_bg_color" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/left_button" 
     android:layout_width="@dimen/titlebar_button_width" 
     android:layout_height="@dimen/titlebar_button_height" 
     android:text="" 
     android:clickable="true" 
     android:textColor="@color/colorstatelist" 
     android:background="@drawable/button_shape_drawable" 
     android:layout_marginLeft="10dp"/> 

    <TextView 
     android:id="@+id/title_textview" 
     android:layout_width="0dip" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="" 
     android:textColor="@android:color/white" 
     android:textStyle="bold" /> 

    <Button 
     android:id="@+id/right_button" 
     android:layout_width="@dimen/titlebar_button_width" 
     android:layout_height="@dimen/titlebar_button_height" 
     android:text="" 
     android:clickable="true" 
     android:layout_marginRight="10dp" 
     android:background="@drawable/button_shape_drawable" 
     android:textColor="@color/colorstatelist" /> 

</LinearLayout> 
01,235 16,

colorstatelist.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="@color/state_pressed"/> 
    <item android:state_selected="true" 
      android:color="@color/state_selected"/> 
    <item android:state_focused="true" 
      android:color="@color/state_focused"/> 
    <item android:color="#808080"/> 
</selector> 
+0

mainActivity.java에서 setLeftButtonBackgroundColor() 및 setRightButtonBackgroundColor() 호출을 제거했을 때 작동합니다.하지만이 호출에서는 버튼의 배경색을 설정하지만 버튼 텍스트 색상의 변경 사항은 발생하지 않습니다. – Ani

답변

13

첫째, 당신의 코드에서 모든 XML 파싱 물건을 제거 얻을. 추가되는 것은 몇 가지 버그입니다. 사용할 수있는 두 가지 방법이 있으며 중 하나만 사용해야하며 둘 다 사용할 수는 없습니다.

레이아웃 XML은 이미 android:textColor을 원하는 상태 목록으로 설정합니다. 이것은 당신이해야 할 모든 것입니다. 버튼 텍스트는 상태에 따라 자동으로 색상이 변경됩니다. Java 코드에서 setTextColor에 대한 모든 호출을 제거하십시오. 현재 이러한 호출은 상태 목록을 정적 색상으로 대체합니다. TitleBarLayout.java에서 setLeft/RightButtonTextColor 메서드를 완전히 제거한 다음 IDE에서 모든 호출을 찾아서 삭제하도록하십시오. 당신은 자바 코드에서 대신 XML에서 색상을 설정하려면

은 또는, 당신은 단지 다음과 같이 호출해야합니다 -

button.setTextColor(getResources().getColorStateList(R.color.colorstatelist)); 

없음 XML이 필요한 구문 분석하지 않습니다.

+0

감사합니다 :-) 그것은 작동합니다. – flipperweid

관련 문제