Android自定义可重用控件?

Android自定义可重用控件?,android,android-layout,android-controls,Android,Android Layout,Android Controls,我正在编写的应用程序中有一些活动,我想在页面上添加一个表单。除了不同的标题和文本外,所有的活动都是相同的形式 我正在寻找一种方法来创建我自己的控件,而不是重写每个活动的控件和逻辑,我可以使用自己的属性将其放入布局xml文件中,所以我只需要编写一次,然后在需要的地方使用该控件 我怎么能做这样的事 谢谢您可以使用扩展android.app.Activity的活动,并将其定义为通用逻辑。然后您的所有其他活动都将扩展它,以取代扩展android.app.Activity。然后它们将继承它,您也可以覆盖您

我正在编写的应用程序中有一些活动,我想在页面上添加一个表单。除了不同的标题和文本外,所有的活动都是相同的形式

我正在寻找一种方法来创建我自己的控件,而不是重写每个活动的控件和逻辑,我可以使用自己的属性将其放入布局xml文件中,所以我只需要编写一次,然后在需要的地方使用该控件

我怎么能做这样的事


谢谢

您可以使用扩展
android.app.Activity
的活动,并将其定义为通用逻辑。然后您的所有其他活动都将扩展它,以取代扩展
android.app.Activity
。然后它们将继承它,您也可以覆盖您想要覆盖的内容。 如果您的布局完全相同,只是存在一些差异,那么这个解决方案还不错,您可以只加载一次
layout.xml
,然后在子类中随意使用它

超类:

    public SuperClass extends Activity{

    protected TextView myTextView;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView = (TextView) findViewById(R.id.my_text_view);

    }
}
public ChildClassA extends SuperClass {

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView.setText("I am in A");

    }
}
    public ChildClassB extends SuperClass {
         @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

        setContentView(R.layout.my_layout);

        myTextView.setText("I am in B");

        }
}
ChildClassA:

    public SuperClass extends Activity{

    protected TextView myTextView;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView = (TextView) findViewById(R.id.my_text_view);

    }
}
public ChildClassA extends SuperClass {

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView.setText("I am in A");

    }
}
    public ChildClassB extends SuperClass {
         @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

        setContentView(R.layout.my_layout);

        myTextView.setText("I am in B");

        }
}
ChildClassB:

    public SuperClass extends Activity{

    protected TextView myTextView;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView = (TextView) findViewById(R.id.my_text_view);

    }
}
public ChildClassA extends SuperClass {

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    myTextView.setText("I am in A");

    }
}
    public ChildClassB extends SuperClass {
         @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

        setContentView(R.layout.my_layout);

        myTextView.setText("I am in B");

        }
}
其他建议:
另一个想法是创建一个。另请参见此图。

将控件编写为android片段怎么样?在xml中,您可以声明一个FrameLayout,然后使用FragmentTransaction的replace()方法将片段插入其中。

取决于每个活动中的差异以及访问它们的方式

如果只是一些不同的字符串,请将这些字符串放在Intent中,Intent将启动活动并在onCreate()中获取它们

如果您的控制代码中存在更多差异,并且您需要区分某种类型的“表单类型A”、“表单类型B”等,您可以在您的意图中放置一个指示器,并检查该指示器,以便在代码中做出不同的决定

例如

if (getArguments().getInt("Type") == 0) {
    // do stuff in control like this
} else if (getArguments().getInt("Type") == 1) {
    // do stuff in control like this
// etc.

getArgument()
相当于
getIntent().getxyztra()

,但是屏幕上的控件呢?比如文本框和按钮?我需要它作为一个控件,这样我也可以将它放在使用它的每个活动上我想要的地方。我更新了我的答案,以尝试提供更多帮助,并回答您的最后一个问题。它是否支持旧的android设备(我的理解是,片段是新的)。你能给我指一些关于这个主题的指南/文档吗?谢谢。通过兼容性库,Android 1.6支持以下片段: