首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在LinerLayout中使用选择器drawable来表示不同的状态吗?

我可以在LinerLayout中使用选择器drawable来表示不同的状态吗?
EN

Stack Overflow用户
提问于 2011-07-17 12:13:19
回答 1查看 496关注 0票数 1

我有一个自定义组件,它是LinearLayout + ImageViewx2 + TextView的组合。自定义组件是可点击的,我想展示给用户视觉反馈,当他们点击它时,闪烁类似于按钮的橙色背景。我创建了以下可绘制,希望根据组件的内部状态使用不同的样式。下面是可绘制的图:

代码语言:javascript
复制
<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>

我还定义了一个引用drawable的样式:

代码语言:javascript
复制
<style name="navigation_item" parent="android:Theme.Dialog">
    <item name="android:background">@drawable/navigation_item</item>
</style>

然后使用以下命令将其分配给组件:

代码语言:javascript
复制
<?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>

我的组件代码是:

代码语言:javascript
复制
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上完成吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-18 03:44:56

看来我要自己回答这个问题了。事实证明合并标签不能指定该标签的样式属性。因此,通过在XML中或在代码中指定使用NavigationItem的样式,就可以解决所有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6721874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档