Android 产品定制之java代码定制(同一应用程序某个Activity使用不同java代码)

前言

在上一篇文章我们讲过,我们可以通过定制实现不同版本使用不同的资源文件,那么是否也可以定制不同的java源代码呢?可以的,难度不大,只是步骤稍微比只定制资源文件繁琐点。

定制须知

虽然定制和构建类型中的字符串和布局资源与main源码集中的值会相应的覆盖,java类却又不同。如果main源码集中的代码引用了一个特定的类每个定制和构建类型可以有自己的实现,只要在main中没有就行。

定制流程
  1. 我们对上一篇文章中的SecondActivity进行定制。如上所说,如要定制java代码,需要在每个定制类型中自己实现,并且main中不可以存在该代码。所以,我们要定制SecondActivity,需要在定制版本的包下自己实现SecondActivity,并且删掉main文件夹中的SecondActivity。(如果不需要定制java代码,只定制资源文件的话,不需要在每个定制包里自己实现java代码,不需要删除main文件夹下代码,默认走main文件夹下的java代码)。为了演示定制java代码,我将main文件夹下的SecondActivity删除,并将其连带package一同复制到每个定制的文件夹下,项目结构如下:
    这里写图片描述
    我们接下来对customtwo进行定制。customone为我们上一篇文章定制过资源文件的项目,customthree则是我们没经过任何定制的原始版本代码。
  2. 定制SecondActivity,我这里为了方便演示,并没有改变太多,只是给ImageView一个Id,然后给它一个点击监听,点击进行吐司。xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SecondActivity">
    <TextView
        android:layout_marginTop="40dp"
        android:layout_gravity="center_horizontal"
        android:id="@+id/tv_second_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/secondpage"
        />
    <TextView
        android:id="@+id/tv_second_next"
        android:padding="10dp"
        android:background="#cf1414"
        android:layout_marginTop="40dp"
        android:layout_gravity="center_horizontal"
        android:text="Go To Thrid Page"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/imgv_meizi"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/img_meizi"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

定制过的java代码如下:

public class SecondActivity extends AppCompatActivity {
    private TextView mTvSecondName;
    private TextView mTvSecondNext;
    private ImageView mImgvMeizi;



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

        mTvSecondName = (TextView) findViewById(R.id.tv_second_name);
        mTvSecondNext = (TextView) findViewById(R.id.tv_second_next);
        mTvSecondNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this,ThridActivity.class);
                startActivity(intent);
            }
        });
        mImgvMeizi = (ImageView) findViewById(R.id.imgv_meizi);
        mImgvMeizi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SecondActivity.this, "我是妹子", Toast.LENGTH_SHORT).show();
            }
        });

    }
}

与customone的SecondActivity相比,我们在customtwo中只是给ImageView设置了监听,点击吐司。
只此两步,java代码定制完成。

定制效果

定制完成,我们可以看看customtwo的效果,如图:
这里写图片描述
可见我们单独对customtwo的SecondActivity进行了定制,customone和customthree的效果并没有受到任何影响。

总结

Android产品定制总体来说并不难,只是我们平时用得少可能相关技能会被大家忽略。在此将相关方法分享出来,希望能够对大家有所帮助。
代码地址:https://github.com/tangxuesong6/productCustom.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值