2016-04-22 75 views
1

你好我做了一个包含文本视图(显示错误或建议)这种化合物视图和编辑文本(输入)Android自定义复合视图,如何重新使用属性?

<TextView 
     android:id="@+id/guidanceOrError" 
     android:gravity="center" 
     android:padding="10dp" 
     android:text="Please input 6 characters and 1 number" 
     android:layout_marginBottom="10dp" 
     android:background="@drawable/input_guidance_background" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <EditText 
     android:id="@+id/inputField" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/rectangle_border" 
     android:padding="@dimen/login_editText_padding" 
     tools:hint="@string/user_name"/> 

</merge> 

而且这是我在一个活动布局使用它

<com.ersen.test.widgets.ValidationInputField 
       android:id="@+id/password" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="@dimen/login_editText_top_margin" 
       android:hint="@string/password" 
       android:inputType="textPassword" /> 

我的问题是像hint和inputType属性被忽略。 这是因为在我的init(AttributeSet attrs)方法,我没有得到的属性了

if(attrs != null){ 
      TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.???); 
      a.recycle(); 
     } 

我的问题是如何使用已经存在的属性?我不想重新创建它们

请帮助我,感谢阅读

编辑1 我复合视图扩展的LinearLayout

回答

1

猜你在谈论一个CustomView

但是你应该declare-styleableattrs.xml和使用它像这样:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="ValidationInputField"> 
     <attr name="android:hint"/> 
     <attr name="android:inputType"/>    
    </declare-styleable> 
</resources> 

所以,编辑您init方法是这样的:

if(attrs != null){ 
       TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ValidationInputField); 
       String hint = a.getString(R.styleable.ValidationInputField_android_hint); 
       int inputType = a.getInt(R.styleable.ValidationInputField_android_inputType,0); 
       // set these two values in your EditText programmatically 
       EditText editText = (EditText) findViewById(R.id.inputField); 
       editText.setHint(hint); 
       editText.setInputType(inputType); 
       a.recycle(); 
       } 
相关问题