2

假设我想将线性布局中的所有 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 成为单行。

我在网上搜索,“样式”不适用于ViewGroup的子元素,“主题”只能应用于一个活动。

有一些类似于将“buttonStyle”应用于应用于 ViewGroup 的样式,但我找不到关于如何处理 TextEdit 的确切/完整文档。

非常感谢。

4

2 回答 2

3

你有几个选择来实现这一点:

1.style.xml

您可以将样式应用于EditText小部件。

  • valuesstyle.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"
    /> 
    

2. 扩展EditText

您可以扩展和创建自己的自定义 EditText。然后,您可以将您的小部件调整singleLine为 true,然后在您的布局中使用此自定义视图。

3. 迭代ViewGroup

您可以通过使用 next ViewIteratorover进行迭代LinearLayout并检查instanceofforEditText然后更改您需要的任何属性。

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
    }
}
于 2013-09-11T17:27:50.197 回答
-3

要将 edittext 设置为您应该在 xml 中使用的一行:

android:singleLine="true"

或者

 android:maxLines="1"
于 2013-09-11T17:04:47.053 回答