我遇到了从xml布局的父元素获取自定义布局属性的巨大麻烦 好吧,假设我有这样的布局
<com.blackstephen.customlayoutexperimental.StripedLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/stripedLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:divider_width="5dp">
<!-- put first view to left. -->
<TextView
android:background="@mipmap/o"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_position="left"
app:percentage="40"
android:text="@string/l1"/>
<com.blackstephen.customlayoutexperimental.StripedLayout/>
请注意,我在子(TextView)应用程序中有这些样式属性:layout_position =&#34; left&#34; 应用程式:百分比=&#34; 40&#34; 我可以通过将此内部类放入自定义显示的代码中来获取这些值
/**
* Custom per-child layout information.
*/
public static class LayoutParams extends MarginLayoutParams {
/**
* The gravity to apply with the View to which these layout parameters
* are associated.
*/
public int gravity = Gravity.TOP | Gravity.START;
public int position = 0;
public int percentage = 33;
public LayoutParams(Context c, AttributeSet attrs) {
super(c, attrs);
// Pull the layout param values from the layout XML during
// inflation. This is not needed if you don't care about
// changing the layout behavior in XML.
TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.StripedLayoutLP);
gravity = a.getInt(R.styleable.StripedLayoutLP_android_layout_gravity, gravity);
position = a.getInt(R.styleable.StripedLayoutLP_layout_position, position);
percentage = a.getInt(R.styleable.StripedLayoutLP_percentage, percentage);
a.recycle();
}
但这只会给我每个孩子的风格属性 我还想要来自父级的样式属性app:divider_width =&#34; 5dp&#34;。 我该怎么做?
答案 0 :(得分:1)
您可以在drawable文件夹中创建XML文件,并将所需的所有属性放在该XML中。如果你想要一个分隔符在drawable中创建一个divider.xml
并定义你想要的所有属性。然后用户android:divider"@drawable/divider"
在TextView上调用这些属性。
实施例
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" /> // color of the divider
在TextView中使用
android:divider="@drawable/divider"
android:dividerHeight="10dp"
答案 1 :(得分:0)
对于每个孩子,我都会使用
一个名为LayoutParams的内部类,它扩展了MarginLayoutParams
但是对于父级布局参数,我在构造函数中使用了这段代码
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.StripedLayout);
dividerWidth = a.getDimensionPixelSize(R.styleable.StripedLayout_divider_width, dividerWidth);
mDividerWidth = dividerWidth;
a.recycle();