美文网首页
安卓自定义style

安卓自定义style

作者: 树蜂 | 来源:发表于2018-12-22 23:34 被阅读0次

    在layout中,难免会有很多控件具有相同的属性,为了简化布局文件,同时方便以后维护,可通过style进行精简(其实精简后也是一把双刃剑)。
    例如下面的布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".business.login.LoginActivity">
    
        <android.support.constraint.Guideline
            android:id="@+id/gl_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.2"/>
    
    
        <TextView
            android:id="@+id/tv_name"
            android:text="账号"
            app:layout_constraintBottom_toBottomOf="@+id/et_name"
            app:layout_constraintTop_toTopOf="@+id/et_name"
            app:layout_constraintRight_toLeftOf="@+id/et_name"
            app:layout_constraintTop_toBottomOf="@+id/gl_start"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/font_normal"
            />
    
    
        <TextView
            android:id="@+id/tv_pwd"
            android:layout_marginTop="8dp"
            android:text="密码"
            app:layout_constraintBottom_toBottomOf="@+id/et_pwd"
            app:layout_constraintTop_toTopOf="@+id/et_pwd"
            app:layout_constraintRight_toLeftOf="@+id/et_pwd"
            app:layout_constraintTop_toBottomOf="@+id/gl_start"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/font_normal"
            />
    
        <EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="@dimen/font_normal"
            android:hint="请输入账号"
            app:layout_constraintLeft_toLeftOf="@+id/barrier"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/gl_start"
            />
    
        <EditText
            android:id="@+id/et_pwd"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="@dimen/font_normal"
            android:hint="请输入密码"
            app:layout_constraintLeft_toLeftOf="@+id/barrier"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/et_name"
            />
    
        <android.support.constraint.Barrier
            android:id="@+id/barrier"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="right"
            app:constraint_referenced_ids="tv_name, tv_pwd" />
    
    </android.support.constraint.ConstraintLayout>
    

    其中TextView中有5五个相同的属性

            app:layout_constraintTop_toBottomOf="@+id/gl_start"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/font_normal"
    

    可在styles.xml中定义其属性

    <resources>
        <style name="input_name">
            <item name="layout_constraintTop_toBottomOf">@+id/gl_start</item>
            <item name="layout_constraintLeft_toLeftOf">parent</item>
            <item name="android:layout_width">wrap_content</item>
            <item name="android:layout_height">wrap_content</item>
            <item name="android:textSize">@dimen/font_normal</item>
        </style>
    </resources>
    

    注意:

    layout中属性app:layout_constraintTop_toBottomOf在自定义style中仅需要写layout_constraintTop_toBottomOf,如果写成app:layout_constraintTop_toBottomOf则会报如下错误:
    Android resource linking failed
    Output: /Users/jishufeng/AndroidStudioProjects/WechatCommunity/CommunityManage/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml:3077: error: style attribute 'app:attr/layout_constraintTop_toBottomOf' not found.
    error: failed linking references.
    总之,只有安卓自带的属性需要添加android命名空间,其他不需要添加命名空间。

    然后进行引用

       <TextView
            android:id="@+id/tv_name"
            android:text="账号"
            app:layout_constraintBottom_toBottomOf="@+id/et_name"
            app:layout_constraintTop_toTopOf="@+id/et_name"
            app:layout_constraintRight_toLeftOf="@+id/et_name"
            style="@style/input_name"
            />
    

    结束

    相关文章

      网友评论

          本文标题:安卓自定义style

          本文链接:https://www.haomeiwen.com/subject/pbtgkqtx.html