浅谈androidx

一次实验的经历

一次实验时,为了实现使用WebView来加载URL,并且需要在跳转之后,出现选择项,选择自定义的MyBrowser进行浏览,于是编写了如下代码:

public class MainActivity extends AppCompatActivity {
    private String urlHead="https://";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText edit1=(EditText)findViewById(R.id.editText);
                String url=edit1.getText().toString();
                if(url.isEmpty()){
                    edit1.setError("请输入网址");
                }
                else {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(urlHead+url));
                    startActivity(intent);
                }
            }
        });
    }
}

webview的代码如下:

public class MainActivity extends AppCompatActivity{

    private String uriHome = "http://www.baidu.com";
    private String url;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        Intent intent = getIntent();
        Uri data = intent.getData();
        if (data == null) {
            url = "http://www.baidu.com";
            data = Uri.parse(url);
        }
        webView.loadUrl(data.toString());
    }
}

但是结果发现,无论如何都无法实现在跳转之后,出现选择项来选择使用哪个浏览器来打开网页。于是便去翻阅各种资料,可是却发现我的代码没有任何问题,终于在一行一行进行审查时,发现了问题所在:

import androidx.appcompat.app.AppCompatActivity;

我引入的是Google最新推出的androidx,而非传统的android.support

import android.support.v7.app.AppCompatActivity;

改成引用android.support包后,项目便可以正常弹出浏览器的选择项。

为什么会引入androidx包

我所使用的是3.4.1版本的Android Studio,在创建项目时,会有如下选择项:
在这里插入图片描述
如果勾选,项目便会自动引入androidx

androidx和android.support有何区别

按照官方文档的说明 ,androidx 是对android.support包的整理后产物。未来新的特性和改进都会进入androidx包。主要原因是support库的命名十分混乱。所以,google推出了 androidx。但是现在的稳定版本还是采用android.support

android.supportandroidx
com.android.support:support-compatandroidx.core:core:1.0.0+
com.android.support:appcompat-v7androidx.appcompat:appcompat:1.0.0+
com.android.support:designcom.google.android.material:material:1.0.0+
com.android.support:multidexandroidx.multidex:multidex:2.0.0+
com.android.support:recyclerview-v7androidx.legacy:legacy-support-v4:1.0.0+
com.android.support:viewpagerandroidx.viewpager:viewpager:1.0.0+

以上是一些常用依赖库的变化,可以看到androidx的包名对于android.support来说,确实精简了不少,而且androidx也将一些UI组件分离出来,例如coordinatorlayoutviewpager等等,这样做可以更加精确的定位需要使用的组件,职责更加分明,也可以减轻应用程序运行时的压力。

迁移

如果想要从android.support迁移到androidx,Android Studio有提供一键迁移功能:
在这里插入图片描述
还需要手动配置gradle.properties,添加如下代码:

android.enableJetifier=true
android.useAndroidX=true

又或者是在创建项目时直接勾选上文所提到的选项:
在这里插入图片描述

为何androidx无法弹出选择项

回到最初的问题,为什么使用androidx时无法弹出浏览器选择项呢?
官方在开发指南有提到目前androidx还存在不稳定的情况,这可能是androidx存在的一个bug。
而且不止是我遇到的这个问题,目前用androidx使用一些控件也会有bug,比如Android的控件RecyclerView就会出现无法下拉列表的bug,所以我推荐大家目前还是使用比较稳定的旧版支持库。

原文地址

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值