2011-07-17 2 views
1

LinearLayout + ImageViewx2 + TextView의 조합 인 사용자 지정 구성 요소가 있습니다. 사용자 정의 구성 요소는 클릭 할 수 있으며 버튼과 비슷한 주황색 배경을 깜박 거리면서 시각적 피드백을 사용자에게 보여주고 싶습니다. 구성 요소의 내부 상태에 따라 다른 스타일을 사용하기 위해 다음 drawable을 만들었습니다. 여기 드로어 블은 다음과 같습니다 사용하여 구성 요소에 있음을LinerLayout과 함께 선택기 드로어 블을 사용하여 여러 상태를 나타낼 수 있습니까?

<style name="navigation_item" parent="android:Theme.Dialog"> 
    <item name="android:background">@drawable/navigation_item</item> 
</style> 

다음 할당 :

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

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:padding="5dp" 
    android:orientation="horizontal" 
    android:clickable="true" 
    style="@style/navigation_item"> 

<ImageView android:id="@+id/navigationIcon" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_marginRight="5dp"/> 

<TextView android:id="@+id/navigationTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_vertical" 
      android:layout_weight="1.0" 
      android:singleLine="true" 
      style="@style/favoriteTitle" 
      android:layout_marginRight="5dp"/> 

<ImageView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/right_arrow"/> 
</merge> 

내 구성 요소 코드는 다음과 같습니다

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/sunshine_gradient" /> 
    <item android:state_focused="true" android:drawable="@drawable/winter_background" /> 
    <item android:drawable="@drawable/component_background" /> 
</selector> 

가 나는 또한 드로어 블을 참조하는 스타일을 정의

public class NavigationItem extends LinearLayout { 

public NavigationItem(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    setOrientation(HORIZONTAL); 
    setGravity(Gravity.CENTER); 
    setWeightSum(1.0f); 
    setClickable(true); 

    LayoutInflater.from(context).inflate(R.layout.navigation_item, this, true); 

    TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NavigationItem, 0, 0); 

    String title = array.getString(R.styleable.NavigationItem_title); 
    if(title == null) title = ""; 
    ((TextView)findViewById(R.id.navigationTitle)).setText(title); 

    Drawable icon = array.getDrawable(R.styleable.NavigationItem_icon); 
    if(icon != null) { 
     ((ImageView)findViewById(R.id.navigationIcon)).setImageDrawable(icon); 
    } 

    array.recycle(); 
} 

} 

기본적으로 @ drawable/component_background가 있기 때문에 구성 요소가 드로어 블을 픽업하는 것으로 보입니다. 그것을 클릭하면 작동하지 않습니다. 나는 눌렀거나 초점을 맞춘 상태 변화를 보지 못했다. 이 작업은 기본 LinearLayout에서 수행 할 수 있습니까?

답변

1

나는 이걸 나 자신에게 대답 할 것처럼 보입니다. 병합 태그가 해당 태그에 스타일 속성을 지정할 수 없음을 나타냅니다. 따라서 XML 또는 코드에서 NavigationItem을 사용하는 스타일을 지정하면이 모든 작업이 완료됩니다.

관련 문제