2014-11-03 57 views
11

一个标准的Android属性我创建具有以下布局重用我的自定义视图

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <EditText 
     android:id="@+id/edit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:singleLine="true"/> 

</merge> 

正如你可以看到一个自定义的化合物的观点,那简直是一个TextViewEditText。我希望能够将我的自定义视图的属性提供给TextViewEditText。例如

<codeguru.labelededittext.LabeledEditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:label="@string/label" 
    app:hint="@string/hint"/> 

我想通了如何转发这些字符串属性的TextViewEditText,repsectively:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LabeledEditText, 
      0, 0); 

    try { 
     label.setText(a.getString(R.styleable.LabeledEditText_label)); 
     edit.setHint(a.getString(R.styleable.LabeledEditText_hint)); 
    } finally { 
     a.recycle(); 
    } 

现在我也想设置EditTextinputType。如果我创建了<attr name="inputType" format="flag">标签,我是否必须使用所有可能的标志值填充它?有没有办法重用EditText已经声明的值?

+0

你的描述不清。你是否试图说,你想要相同的属性标签在所有组件中是通用的? – prashantwosti 2014-11-03 04:55:11

+0

@prashantwosti不,我想要一个'label'属性来设置'TextView'的'android:text'和'hint'属性来设置'EditText'的'android:hint'。这些很简单,因为它们只是字符串。不过,我也想要一个'inputType',它为'EditText'设置'android:inputType'。但我不想为所有可能的值重写代码。 – 2014-11-03 05:12:13

+0

我会建立一个适当的SSCCE来说明更好。 – 2014-11-03 05:14:16

回答

1

你可以得到这样的:

int[] values = new int[]{android.R.attr.inputType}; 
TypedArray standardAttrArray = getContext().obtainStyledAttributes(attrs, values); 
try { 
    mInputType = standardAttrArray.getInt(0, EditorInfo.TYPE_NULL); 
} finally { 
    standardAttrArray.recycle(); 
} 
+1

这似乎接近我想要的。但是,它实际上并没有在我的自定义视图中封装'EditText'的'inputType'。另外,我宁愿将所有属性转发到所述“EditText”,让它自己提取它们,而不是编写所有代码行来自己提取每个属性。 – 2016-01-20 20:45:58