【问题标题】:Change Version Of Material 1.1.0 to 1.3.0将材料 1.1.0 的版本更改为 1.3.0
【发布时间】:2021-04-11 12:09:58
【问题描述】:

还有我的第二个问题: 我使用 TextInputLayout :

<com.google.android.material.textfield.TextInputLayout              
  style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColorHint="@color/LightBlue"              
 android:theme="@style/ThemeOverlay.AppTheme.TextInputEditText.Outlined"
                app:boxStrokeColor="@color/selector"
                app:boxStrokeWidth="3dp"
                app:startIconTint="@color/white">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/numberOfPlayer_txt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:inputType="numberDecimal"
                    android:textColor="@color/gold" />

            </com.google.android.material.textfield.TextInputLayout>

样式文件

 <style name="AppTheme" 
  parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:windowBackground">@color/Thistle</item>
                   <!-- use in get player information -->
       <item name="CustomTextStyle">@style/Widget.App. TextInputLayout. 
       OutlinedBox</item>
  </style>


    <style name="ThemeOverlay.AppTheme.TextInputEditText.Outlined" 
     parent="">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="boxCornerRadiusBottomEnd">20dp</item>
        <item name="boxCornerRadiusBottomStart">20dp</item>
        <item name="boxCornerRadiusTopEnd">20dp</item>
        <item name="boxCornerRadiusTopStart">20dp</item>
        <item name="android:hint">Number of player</item>
        <item name="hintTextColor">@color/card1</item>
        <item name="startIconDrawable">@drawable/ic_people</item>
    </style>

    <style name="Widget.App.TextInputLayout.OutlinedBox" 
    parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxStrokeColor">@color/player_information</item>
        <item name="boxCornerRadiusBottomEnd">15dp</item>
        <item name="boxCornerRadiusBottomStart">15dp</item>
        <item name="boxCornerRadiusTopEnd">15dp</item>
        <item name="boxCornerRadiusTopStart">15dp</item>
        <item name="android:textColorHint">@color/white</item>
        <item name="startIconDrawable">@drawable/player</item>
        <item name="startIconTint">@color/gold</item>
        <item name="elevation">5dp</item>
        <item name="boxStrokeWidth">2dp</item>
        <itemname="materialThemeOverlay">@style/ThemeOverlay.App. 
         TextInputEditText.OutlinedBox</item>
        <item name="hintTextColor">@color/AntiqueWhite</item>
        <!-- .... -->
    </style>

    <style name="ThemeOverlay.App.TextInputEditText.OutlinedBox"  
    
   parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
        <!-- to change the cursor color -->
        <item name="colorControlActivated">@color/white</item>
    </style>

这是我的选择器文件

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/DarkSeaGreen" 
    android:state_focused="true"/>
    <item android:color="@color/white"/>
    </selector>

和属性

 <resources>
   <attr name="customTextInputStyle" format="reference" />
   <attr name="CustomTextStyle" formet ="reference"/>
   </resources>

当我将材质的版本 1.1.0 更改为 1.3.0 时,我之前创建的文本输入布局1 的形状是扭曲的。它变得比以前更宽了。我找不到这个变化的原因。如图所示,文本输入布局非常宽,提示文本在背面仍然看起来是黑色的。

【问题讨论】:

    标签: android styles material-components-android android-textinputlayout


    【解决方案1】:

    主要问题在 ThemeOverlay 中。您必须添加父 ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox

    <style name="ThemeOverlay.App.TextInputEditText.OutlinedBox" parent="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
        <item name="colorPrimary">@color/...</item>
    </style>
    

    需要,因为您要扩展的默认样式 Widget.MaterialComponents.TextInputLayout.OutlinedBox 定义了自己的 materialThemeOverlay 和 如果没有父依赖项,您将失去默认行为。

    也在您的 xml 布局中删除 android:theme="@style/ThemeOverlay.AppTheme.TextInputEditText.Outlined"。您不需要它,因为您已经在样式中使用了materialThemeOverlay,并且 xml 布局中定义的主题覆盖了它,并且这个主题覆盖是错误的。

    还有:

    • 使用最小宽度,因为您使用的是大圆角半径15dp
            <com.google.android.material.textfield.TextInputLayout
                android:minWidth="150dp"
                android:layout_width="wrap_content"
    
    • 最后提示使用的颜色:
            <item name="android:textColorHint">@color/red600Dark</item>
            <item name="hintTextColor">@color/teal_700</item>
    

    最终布局:

       <com.google.android.material.textfield.TextInputLayout              
          style="@style/Widget.App.TextInputLayout.OutlinedBox"
                android:minWidth="150dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:startIconTint="@color/white">
    
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/numberOfPlayer_txt"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:inputType="numberDecimal"
                        android:textColor="@color/gold" />
    
       </com.google.android.material.textfield.TextInputLayout>
    

    与:

    <style name="Widget.App.TextInputLayout.OutlinedBox"
        parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxStrokeColor">@color/text_input_stroke_selector</item>
        <item name="boxCornerRadiusBottomEnd">15dp</item>
        <item name="boxCornerRadiusBottomStart">15dp</item>
        <item name="boxCornerRadiusTopEnd">15dp</item>
        <item name="boxCornerRadiusTopStart">15dp</item>
        <item name="startIconDrawable">@drawable/ic_...</item>
        <item name="startIconTint">@color/...</item>
        <item name="elevation">5dp</item>
        <item name="boxStrokeWidth">2dp</item>
        <item name="materialThemeOverlay">@style/ThemeOverlay.App.TextInputEditText.OutlinedBox</item>
        <item name="android:textColorHint">@color/....</item>
        <item name="hintTextColor">@color/....</item>
    </style>
    
    <style name="ThemeOverlay.App.TextInputEditText.OutlinedBox" parent="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
        <item name="colorPrimary">@color/....</item>
    </style>
    

    【讨论】:

    • 我在问题中添加了图片
    • 我只需要做&lt;style name="ThemeOverlay.AppTheme.TextInputEditText.Outlined" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox"&gt; 对吗?
    • @Neo 是的。在 xml 布局中删除 android:theme="@style/ThemeOverlay.AppTheme.TextInputEditText.Outlined"。你不需要它,它是错误的。注意wrapContent,因为圆角半径很大,场地可能会更高。
    • 为什么我需要在&lt;style name="ThemeOverlay.App.TextInputEditText.OutlinedBox" parent="@style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox"&gt; &lt;item name="colorPrimary"&gt;@color/...&lt;/item&gt; &lt;/style&gt;里面添加&lt;item name="materialThemeOverlay"&gt; @style/ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox &lt;/item&gt;
    • 你能分享你的布局和样式代码吗?
    猜你喜欢
    • 2018-12-26
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2022-08-24
    • 2020-12-09
    相关资源
    最近更新 更多