EditText背景问题(android)

时间:2009-10-26 16:02:41

标签: 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"      
      />

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"    
      />

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

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

8 个答案:

答案 0 :(得分:16)

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

★的问题: 将Background设置为EditText时,它看起来很糟糕

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

更改背景图像

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

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

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

,可以重复使用并进行更多自定义

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

★的溶液2 : 使用的选择器作为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>

❷OnEditText xml set selector:

<EditText 
    ...
    android:background="@layout/**edittext_selector**"
    ...
</EditText> 

★的注意

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

●照顾选择器中的项目顺序。选择器xml文件中项目的差异顺序将有不同的背景。

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

▼的缺点: 努力为选择器创建九路径图像,如果您想要更改颜色或添加更多颜色,您必须创建更多图像和选择器。因此它不如Solution1

强大

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

我是按照解决方案2实施的,但它确实有效。

答案 1 :(得分:11)

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

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

它像这样崩溃:

  • “getBackground()”从组件中获取背景
  • “setColorFilter”将调用背景图像本身的过滤
  • “颜色&LT;你的滤色此处&gt;” 中确定要传递给过滤器的颜色
  • “PorterDuff.Mode&LT;你的期望的过滤器,模式&gt;”设置您想要使用给定颜色和获取的背景图像进行的操作。

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

答案 2 :(得分:4)

如果您将EditText背景设置为一种颜色,您将有效地抑制Android的默认背景probably a Nine Patch,但不仅仅是简单的颜色。结果 - 您将获得一个最简单的EditText形式 - 一个方框。这里有点过时list of built-in drawables给你一些想法

答案 3 :(得分:4)

如果您想在不改变背景图像的情况下即时编辑Android背景的颜色,请尝试以下操作:(它可能不是最佳解决方案,但它有效):

YourEditText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.MULTIPLY);

答案 4 :(得分:3)

您无需创建图像。你可以使用android系统中的内置图像。所以在xml中编辑你的EditText如下: -

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="10dp"
    android:hint="@string/campaign_message"
    android:inputType="textMultiLine"
    android:background="@android:drawable/editbox_background_normal"
    android:minHeight="80dp" >
</EditText>

请注意以下一行:android:background="@android:drawable/editbox_background_normal"

答案 5 :(得分:2)

我认为您应该更改背景颜色,而不是背景。因为它使用的是xml自定义形状。

  • 用作背景的drawable。这可以是对完全可绘制资源的引用(例如PNG图像,9补丁,XML状态列表描述等),也可以是纯色,例如#ff000000(黑色)。

    < / LI>
  • 可以是@[+][package:]type:name形式的其他资源的引用,也可以是?[package:][type:]nam e形式的主题属性的引用。

  • 可以是#rgb#argb#rrggbb#aarrggbb形式的颜色值。

答案 6 :(得分:1)

如果要设置EditText的样式,请查看http://www.androidworks.com/changing-the-android-edittext-ui-widget

答案 7 :(得分:0)

我必须使用SRC_ATOP才能为我工作

mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);