【问题标题】:Custom android controls with elements带有元素的自定义 android 控件
【发布时间】:2017-03-15 16:50:27
【问题描述】:

我对创建自定义 android 控件有一个非常基本的想法和经验。

我知道我可以创建一个自定义控件,它基本上是一个包含多个控件的布局,添加属性和任何我想要的逻辑。

但现在我需要一些不同的东西。我有一个应用程序,其中我所有的 EditText 元素下面都有一条灰色的水平线。 我知道这可以通过backgroundTint 实现,但这仅适用于 api 21 及更多版本。

因此,我不想在我使用的每个 EditText 元素下方添加这条灰线,而是想创建一个扩展 EditText 的自定义元素,但也有这条灰线。像这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:src="@drawable/gray_divider"/>

</LinearLayout>

在后面的代码中:

public class MyEditText extends LinearLayout {

public MyEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    Init();
}

private void Init() {
    LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.my_edit_text, this);

    InitViews(view);
}

所以我的问题是: 为了让MyEditTextEditText 一样运行,我必须为每个EditText 属性创建一个属性。我想这样做:

<MyEditText android:layout_width="match_parent"
android:layout_height="match_parent"
android:text_color="@android:color/white" />

无需在后面的代码中添加任何内容。这可能吗?

【问题讨论】:

    标签: java android custom-controls


    【解决方案1】:

    在这种情况下,一个好的做法是使用带底线的背景。

        <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="-10dp"
        android:right="-10dp"
        android:top="-10dp">
        <shape android:shape="rectangle">
            <gradient
                android:angle="270"
                android:endColor="@color/transparent"
                android:startColor="@color/transparent" />
            <stroke
                android:width="@dimen/border"
                android:color="@color/border" />
            <corners android:radius="@dimen/border" />
        </shape>
    </item>
    

    制作一个.xml资源并将其放入Drawable文件夹中。例如border_bottom.xml

    而对于编辑文本,只需给出类似的背景

        android:background="@drawable/border_bottom"
    

    希望对你有帮助。

    【讨论】:

    • 像魅力一样工作!也非常优雅。稍微改了一下代码。 &lt;layer-list xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;item android:left="-10dp" android:right="-10dp" android:top="-10dp"&gt; &lt;shape android:shape="rectangle"&gt; &lt;stroke android:width="1dp" android:color="@android:color/darker_gray" /&gt; &lt;/shape&gt; &lt;/item&gt; &lt;/layer-list&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多