从Android中的Viewgroup设置孩子的风格?

时间:2013-09-11 16:55:38

标签: android android-layout android-view

假设我想将线性布局中的所有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的完整/完整文档。

非常感谢。

2 个答案:

答案 0 :(得分:3)

您无法实现这一目标:

1。 style.xml

您可以将样式应用于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"
    /> 
    

2。扩展EditText

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

3。迭代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"