EditText背景问题(android)

Den*_*nie 8 android

这样的EditText背景有问题

<EditText
     android:id="@+id/edit"
     android:layout_width="fill_parent"
     android:layout_height="35sp"                                                                       
     android:singleLine="true"

     android:layout_marginLeft="5px"
     android:layout_marginRight="5px"
     android:layout_marginTop="5px"
     android:textAppearance="?android:attr/textAppearanceSmall"      
      />
Run Code Online (Sandbox Code Playgroud)

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext.jpg

在尝试设置背景后,它看起来更糟

<EditText
     android:id="@+id/edit"
     android:layout_width="fill_parent"
     android:layout_height="35sp"                                                                       
     android:singleLine="true"

     android:layout_marginLeft="5px"
     android:layout_marginRight="5px"
     android:layout_marginTop="5px"
     android:textAppearance="?android:attr/textAppearanceSmall"
     android:background="#ffffff"    
      />
Run Code Online (Sandbox Code Playgroud)

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext2.jpg

EditText背景会发生什么?如何使EditText保持默认样式?

Ngu*_*Dat 16

这里有2个改变我之前调查的EditText背景的解决方案,希望它可以帮到你:

问题:当将背景设置为EditText时,它看起来很糟糕

Analysys:EditText使用九路图像作为背景.他们使用选择器根据EditText的当前状态更改背景图像(启用/聚焦/按,默认)

解决这个问题有两种解决方案,每种解决方案都有优势和劣势:

解决方案1:自己创建自定义EditText(按照此解决方案,我们可以自由更改EditText的视图.

优点:您可以自由渲染EditText视图,按照您的目的,无需创建Ninepath图像作为Android EditText的当前工具.(您必须在EditText中提供IF以根据EditText的状态(启用/聚焦....)平滑地更改背景.如果您想要更改背景颜色或添加更多颜色,可以重复使用和更多自定义

缺点:需要花费很多精力来创建和测试自定义EditText.(我选择解决方案2所以没有解决方案1的演示工具,如果有任何人遵循此解决方案随时与我们分享您的演示代码)

Solution2:使用选择器作为Android工具

❶创建xml文件调用edittext_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edittext_selector">
    <!-- Image display in background in select state -->    
    <item 
        android:state_pressed="true" 
        android:drawable="@drawable/your_ninepath_image">
    </item>

        <!-- Image display in background in select state -->    
    <item 
        android:state_enabled="true" 
        android:state_focused="true" 
        android:drawable="@drawable/your_ninepath_image">
    </item>

    <!-- Default state --> 
    <item android:state_enabled="true" 
        android:drawable="@drawable/your_ninepath_image">
    </item> 
</selector>
Run Code Online (Sandbox Code Playgroud)

❷在EditText xml设置选择器上:

<EditText 
    ...
    android:background="@layout/**edittext_selector**"
    ...
</EditText> 
Run Code Online (Sandbox Code Playgroud)

注意:

●在这个演示代码中,我删除了一些视图状态的行为,参考android工具的详细行为(焦点/非焦点,启用/禁用,按,选择...)

●注意选择器中项目的顺序.选择器xml文件中项目的差异顺序将有不同的背景.

优点:简单,只需创建选择器并将选择器设置为背景,如果您想要更多颜色,只需设置更多选择器然后按代码设置.

缺点:努力为选择器创建九路图像,如果您想要更改颜色或添加更多颜色,您必须创建更多图像和选择器.所以它不如Solution1强大

这是我对图像处理程序背景的调查,所以它可能是对还是错,如果您有更好的解决方案或解释,请随时与我们分享.

我实施了遵循解决方案2并且它有效.


小智 11

我的解决方案是一行代码:

<your-widget-component-that-has-a-background-color>.getBackground().setColorFilter(Color.<your-desired-color>, PorterDuff.Mode.MULTIPLY);).
Run Code Online (Sandbox Code Playgroud)

它像这样崩溃:

  • "getBackground()"从组件中获取背景
  • "setColorFilter"将调用背景图像本身的过滤
  • "Color.<your-color-here>"确定要传递到滤镜上的颜色
  • "PorterDuff.Mode.<your-desired-filter-mode>"设置您想要对给定颜色和获取的背景图像进行操作的类型.

具有图像编辑软件知识的人可能会识别该模式.每种模式对颜色如何应用于背景图像具有一定的影响.要简单地"覆盖"图像的颜色,同时保留其渐变,边框等,请使用MULTIPLY.


Bos*_*one 4

如果您将 EditText 背景设置为某种颜色,您将有效地抑制 Android 的默认背景,该背景可能是九个补丁,但绝对不仅仅是简单的颜色。结果 - 您将得到最简单形式的 EditText - 一个方框。这是稍微过时的内置绘图列表,可以给您一些想法