在 ListView 中看起来像 TextView 的 EditText
Posted
技术标签:
【中文标题】在 ListView 中看起来像 TextView 的 EditText【英文标题】:EditText that looks like TextView inside a ListView 【发布时间】:2012-02-19 12:48:33 【问题描述】:我是developing an application,用户可以编辑ListView
中的数据。我想在 ListView 中有一个EditText
,这个编辑文本应该像 TextView,但是当用户点击它时,它应该看起来像 EditText
,我怎样才能实现这个功能?
实际上,ListView 中的 EditText 看起来很丑,我希望 EditText 默认看起来像 TextView,但是当用户尝试编辑数据时,它应该看起来像 EditText。
我希望我的问题很清楚,如果不是请问。
【问题讨论】:
查看我的应用截图,你在寻找这种类型的输出吗? EditText 等; // 初始化你的edittext// Et.setCursorVisible(false); Et.setLongClickable(false); Et.setClickable(false); Et.setFocusable(false); Et.setSelected(false); Et.setKeyListener(null); Et.setBackgroundResource(android.R.color.transparent);你再也不会像 EditText 一样看到它了。 (在手机上打字回答问题太痛苦了。版主,请重新格式化答案。)以防万一你想在没有 XML 的情况下这样做.. 【参考方案1】:我在应用中使用的以下文件。
main.xml 在布局文件夹中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:text="@string/hello" />
<EditText android:layout_
android:padding="5dip"
android:layout_
android:textColor="#00f"
android:textSize="20dip"
android:background="@drawable/bg" />
<EditText android:layout_
android:padding="5dip"
android:layout_
android:textColor="#00f"
android:textSize="20dip"
android:background="@drawable/bg" />
</LinearLayout>
myshape.xml 在可绘制文件夹中
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff"/>
<corners android:radius="2dip" />
<stroke android:
android:color="#ff4500" />
</shape>
bg.xml 在可绘制文件夹中
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true"
android:state_focused="true"
android:drawable="@drawable/myshape"/>
</selector>
Java 文件
public class EditTextSelector extends Activity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
【讨论】:
【参考方案2】:好吧,我建议使用 textview.. 当点击它时,它将切换到父级中的 editText(add View /removeView).. 当焦点发生变化时,它将恢复到 textview 并进行新的更改.. 第二种解决方案使用弹出对话框进行编辑,完成按钮提交并返回以返回列表。改变editText风格的第三个解决方案:
editText.setBackgroundResource(R.layout.writemode);
//later after this item loses focus, use:
editText.setBackgroundResource(R.layout.readmode);
【讨论】:
【参考方案3】:使用setCursorVisible(false)隐藏edittext setCursorVisible(true)的光标和onclick。这个,也将背景颜色设置为edittext的白色
【讨论】:
【参考方案4】:使用 选择器 为 EditText 创建不同的状态。如果它处于空闲状态,则将普通颜色的可绘制对象作为背景,如果聚焦,则使用类似于真实 EditText 背景的 9 补丁 PNG 可绘制对象。
希望对你有帮助。如果您不知道如何使用选择器,请随时问我。
截图示例
我在我的应用程序中使用了 1 个 TextVuew 和 2 个 EditText 视图,请查看下面的屏幕截图以了解如何使用 EditText 将根据您的要求看起来像。如果你喜欢它们并且它实际上是必需的,那么我在这里发布代码。
初始屏幕
在为第一个 EditText 输入时
在为第二个 EditText 输入时
【讨论】:
我对android很陌生,如果你能指导我怎么做?你会很好的。 等待我将在新答案中发布代码。仅以上截图的应用代码。【参考方案5】:android:cursorVisible="false"
android:background="@android:color/transparent"
【讨论】:
【参考方案6】:您可以使用 AlertDialog 提示用户输入。
【讨论】:
以上是关于在 ListView 中看起来像 TextView 的 EditText的主要内容,如果未能解决你的问题,请参考以下文章
TextView 在 ListView 内的自定义 ArrayAdapter 中被切断