最基本的Android视图,支持重力

时间:2017-02-06 21:54:32

标签: android xamarin

我有一个自定义的Android小部件,它抽象了一个基于 RecordDataField 的论坛字段 RelativeLayout (基本上是对一个字段进行分组)和它的标签在一起,并采用自定义属性来确定标签相对于字段的位置,以显示下拉列表的下拉按钮,...)

public abstract class RecordDataField : RelativeLayout
{
    protected TextView _tvLabel;  
    protected FieldLayout _rlInput;
    //protected EditText _etInput;
    protected FieldInput _etInput;
    protected Button _btnDrop;

    protected abstract FieldInput InstantiateInput();
}

FieldInput 是一个子类 EditText ,没什么特别的。

RecordDataField 的任何子项实现 InstantiateInput ,类似于以下内容( _etInput 最终会以值结束由 InstantiateInput

返回
protected override FieldInput InstantiateInput()
{
        View v = _inflater.Inflate(Resource.Layout.RecordDataFields, null);

        _fieldInput = ((ViewGroup)v).FindViewById<FieldInput> Resource.Id.RecordDataFieldInput);

        return (FieldInput)_fieldInput;
}

这适用于我的所有 RecordDataField 变体,但它们都是 FieldInput EditText )基于。我现在需要更加通用,当我尝试将抽象方法 InstantiateInput 的返回类型更改为 View 时,我在基类中遇到了问题,b / c它在 _etInput 上设置了重力和其他属性,显然 View 不支持重力

public virtual void InitView()
{
    _tvLabel = (TextView)_inflater.Inflate(Resource.Layout.RecordDataFieldLabel, this, false);
    _tvLabel.Text = _label;
    _tvLabel.Gravity = _labelGravity;

    ViewGroup.LayoutParams tvLabelLayout = (ViewGroup.LayoutParams)_tvLabel.LayoutParameters;

    tvLabelLayout.Width = _labelWidth;

    RelativeLayout.LayoutParams lpLabel = new RelativeLayout.LayoutParams(tvLabelLayout);

    lpLabel.AddRule(LayoutRules.AlignParentTop);
    lpLabel.AddRule(LayoutRules.AlignParentLeft);

    AddView(_tvLabel, lpLabel);
    ...
}

我可以从 InstantiateInput 返回哪种视图类型的建议,以便此小部件可以支持最多的视图类型(这里的动机是我想要使用 CheckBox 取代 EditText FieldInput )?

1 个答案:

答案 0 :(得分:1)

试试TextView (android.widget.TextView)CheckboxEditText都扩展TextView,支持gravity param以支持对齐内容