gpt4 book ai didi

android - 我可以使用 selector drawable 和 LinerLayout 来表示不同的状态吗?

转载 作者:行者123 更新时间:2023-11-30 04:36:38 26 4
gpt4 key购买 nike

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

<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>

我还定义了一个引用可绘制对象的样式:

<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>

我的组件代码是:

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 上完成吗?

最佳答案

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

关于android - 我可以使用 selector drawable 和 LinerLayout 来表示不同的状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6721874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com