假设我想将线性布局中的所有EditText字段设置为单行,我应该如何实现?
详细代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@style/LoginTextFieldTheme"
>
<EditText
android:id="@+id/textPassword"
android:layout_weight="1"
android:layout_width="0dp"
android:inputType="textPassword"
android:hint="password"
/>
<EditText
android:id="@+id/textPasswordConfirm"
android:layout_weight="1"
android:layout_width="0dp"
android:inputType="textPassword"
android:hint="password confirm"
/>
</LinearLayout>
我想在LoginTextFieldTheme中指定一些内容,以便它可以使我的EditText成为单行。
我在网上搜索,“style”不适用于ViewGroup的子元素,“theme”只能应用于某个活动。
将“buttonStyle”应用于应用于ViewGroup的样式,但我找不到有关如何处理TextEdit的完整/完整文档。
非常感谢。
答案 0 :(得分:3)
您无法实现这一目标:
您可以将样式应用于EditText
小部件。
在 values 文件夹的style.xml
中添加以下样式:
<style name="My.EditText.Style" parent="@android:style/Widget.EditText">
<item name="android:singleLine">true</item>
</style>
对于布局中的每个EditText
,请添加:style="@style/My.EditText.Style"
像:
<EditText
android:id="@+id/textPassword"
style="@style/My.EditText.Style"
android:layout_weight="1"
android:layout_width="0dp"
android:inputType="textPassword"
android:hint="password"
/>
EditText
您可以扩展和创建自己的自定义EditText。然后,您可以使用singleLine
调整窗口小部件,然后在布局中使用此自定义视图。
ViewGroup
您可以使用ViewIterator
上的LinearLayout
进行迭代,然后instanceof
查看EditText
,然后更改您需要的任何属性。
public class ViewIterator implements java.util.Iterator<View>
{
private java.util.Stack<View> mNodes;
public ViewIterator(View view)
{
mNodes = new java.util.Stack<View>();
if (view != null)
{
mNodes.push(view);
}
}
public boolean hasNext()
{
return !mNodes.empty();
}
public View next()
{
View view = null;
// if remaining nodes
if (hasNext())
{
// return the last element
view = mNodes.pop();
assert (view != null);
// if it is a container, add its children to the stack
if (view instanceof ViewGroup || view instanceof AdapterView)
{
ViewGroup viewGroup = (ViewGroup)view;
for (int i = 0; i < viewGroup.getChildCount(); i++)
{
assert (viewGroup.getChildAt(i) != null);
mNodes.push(viewGroup.getChildAt(i));
}
}
}
// return result
return view;
}
public void remove()
{
// not supported
}
}
答案 1 :(得分:-2)
将edittext设置为您应该在xml中使用的一行:
android:singleLine="true"
或
android:maxLines="1"