android - 如何在android中创建像Iphone Edittext框一样的渐变

标签 android xml android-layout

下面是 iPhone EditText 控件的示例:

enter image description here

如何在 Android 中创建相同的控件?

最佳答案

Three kinds of EditText backgrounds

基本上,我看到三种方式来做你想做的事。

第一种方法:

第一个是 Akki says ,制作一个 9 补丁,完全复制您要从(未指定的其他平台)使用的渐变填充框。这让您的应用在两个平台上看起来尽可能接近完全相同。

这是根据您上面的屏幕截图制作的 9 补丁。 (这是 res/drawable-*dpi/rounded_text_field.9.png)

Nine-patch background

第二种方法:

第二个是使用可扩展的 native 绘图功能获得相同的效果。这看起来不会完全一样,但可以说提供了更平滑的结果。

下面是一些生成带有渐变填充的圆角矩形图像的代码。 (这是 res/drawable/gradientbg.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"
>
<corners android:radius="8dp"/>
<stroke android:width="2dp"
    android:color="#444"/>
<gradient 
   android:startColor="#888"
   android:centerColor="#fff"
   android:endColor="#fff"
   android:type="linear"
   android:angle="270"
   />
</shape>

其实,我撒谎了。在我原来的屏幕截图中,角太大了,所以我将角半径从 16dp 减小到 8dp。这是它现在的样子。好多了,你不觉得吗?比调整 4 种不同密度的位图容易得多。

Gradient background with 8dp radius corners.

第三种方法:

第三种方法是让平台随心所欲,并在其自己的范例中尽其所能。这样做的好处是,在不同版本的操作系统上,您的应用程序将与系统的其余部分无缝融合,即使系统主题发生变化也是如此。

这是在 Gingerbread 上运行完全相同代码的默认 EditText。它在 Holo 主题设备(例如我用来创建第一个屏幕截图的 Jellybean 驱动的平板电脑)上看起来很不合适,反之亦然。

EditText on Gingerbread

作为引用,这里是包含所有三个 EditText 的布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="32dp"
android:orientation="vertical"
 >
<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="24dp"
    android:layout_marginTop="24dp"
    android:padding="12dp"
    android:gravity="center"
    android:background="@drawable/rounded_text_field"
    android:inputType="text"
    android:textColor="@android:color/black"
    android:text="9-patch background." >
    <requestFocus />
</EditText>
<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="24dp"
    android:layout_marginTop="24dp"
    android:padding="12dp"
    android:gravity="center"
    android:background="@drawable/gradientbg"
    android:inputType="text"
    android:textColor="@android:color/black"
    android:text="Gradient background." />
<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="24dp"
    android:layout_marginTop="24dp"
    android:padding="12dp"
    android:gravity="center"
    android:inputType="text"
    android:text="Default background." />
</LinearLayout>

关于android - 如何在android中创建像Iphone Edittext框一样的渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644429/

相关文章:

android - 防止应用程序在方向更改期间重新启动

xml - 如何查看命名空间?

php - PHP的Javascript函数引发 “Illegally Formed XML Syntax”错误

android - 从本地 xml 解析 XML

android - 在线性布局中将焦点从父级传递给子级

Android自定义后台xml发送属性

android - flutter_session 和 shared_preferences 在 flutter 中不能一起工作?

android - 如何删除后退按钮和 SearchView 之间的左侧空间

java - RenderScript 模糊覆盖原始位图

android - 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager