Android开发 UI常见问题汇总

1 首页相关

1toolbar和手机状态栏重叠

开源第三方库还是谷歌提供的toolbar,都可以使用
在xml中,toolbar属性写(甚至是自己用布局组装的toolbar也可以,在自定义布局的最外层布局中写就可以)

android:fitsSystemWindows="true"

基本可以解决

参考
https://blog.csdn.net/u013467495/article/details/109305378

2 recyclerview No layout manager attached; skipping layout

问题:
使用recyclerview,已获取到数据,但是不显示内容,并报错No layout manager attached; skipping layout。
错误写法

//数据源
List list = new ArrayList();
list.add(...);
list.add(...);
list.add(...);
//创建adapter
adapter = new Adapter(list);
//设置adapter
recyclerView.setAdapter(adapter);

解决:
recyclerview与listview不同,需要设置LayoutManager。

List list = new ArrayList();
list.add(...);
list.add(...);
list.add(...);
adapter = new Adapter(list);
//必须先设置LayoutManager
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

参考
https://blog.csdn.net/adojayfan/article/details/81844182

3 tablayout中的tabitem使用图标时如何设置图标大小

tabItem可以直接设置一个icon,但若直接设置,则无论图标大小,展示效果均为小图标,如下图中间的三个item所示。在这里插入图片描述

目前我的解决方案如下(忘记参考了哪位博主了,不好意思)
首先在drawable中创建一个tabitem_test.xml,装载切换效果

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/ic_music1"
        android:state_selected="false"/>
    <item android:drawable="@mipmap/ic_music2" android:state_selected="true"/>
</selector>

在layout中创建一个tab_item1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="37dp"
        android:layout_height="37dp"
        android:layout_centerInParent="true"
        android:background="@drawable/ic_test"></ImageView>
</RelativeLayout>

activity.xml代码

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        app:tabGravity="fill"
        app:tabIndicatorHeight="0dp"
        app:tabMode="fixed">
    </com.google.android.material.tabs.TabLayout>
    
<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewpager2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/app_backblack"
    >
</androidx.viewpager2.widget.ViewPager2>

java代码如下

private TabLayout tabLayout;
private ViewPager2 viewPager2;

    final int[] tabicons = new int[]{R.layout.tab_item1,R.layout.tab_item1,R.layout.tab_item1};
  tabLayout = findViewById(R.id.tab_layout);
        viewPager2 = findViewById(R.id.viewpager2);
        OuterPagerAdapter outerPagerAdapter = new OuterPagerAdapter(this);
        viewPager2.setAdapter(outerPagerAdapter);

        //TabLayout 和 Viewpager2 关联
        TabLayoutMediator tab = new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                tab.setCustomView(titleItem[position]);
            }
        });
        tab.attach();

图标素材如下

在这里插入图片描述
在这里插入图片描述

2 addview相关

1 dialog报错 android.view.WindowManager$BadTokenException: Unable to add window

        MyDialog myDialog = new MyDialog (getApplicationContext());
        myDialog .show();

问题原因:Dialog的context不能传入getApplicationContext(),它要依赖于activity。

解决方案:将getApplicationContext()改成this/activity的context(若未在activity中)即可。
在这里插入图片描述
参考
https://blog.csdn.net/u011038298/article/details/84104451

3 二级页面相关

1 ActionBar返回键

返回键无效
原因:菜单项的点击事件调用存在问题

 public boolean onOptionsItemSelected(MenuItem item)
    {
      //android.R.id.home对应应用程序图标的id
        if(item.getItemId() == android.R.id.home)
        {
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

https://blog.csdn.net/andygo_520/article/details/51439688

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值