主线程出现问题怎么解决啊QAQ

img

img


代码和报错都在上面了,填false 还能循环充值功能,填true就出现主线程错误,不能循环语句了,为啥啊(┯_┯)


Scanner sc = new Scanner(System.in);
。。。。。。
。。。。。。
sc.close();

这两句移到for循环的外边,上下各一句

  • 这篇博客: QQ主页抽屉效果实现,有趣的弹簧动效中的 复现第一步,整一个沉浸式状态栏,状态栏有个头像可以打开抽屉 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 新建个 Activity,命名为 DrawerActivity:

    class DrawerActivity : AppCompatActivity() {
        companion object {
            private const val TAG = "DrawerActivity"
        }
    
        private lateinit var binding: ActivityDrawerBinding
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityDrawerBinding.inflate(layoutInflater)
            setContentView(binding.root)
        }
    }
    

    用 ViewBinding 绑定布局文件,接下来编辑 Activity 的布局文件:

    <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/drawerLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#000000"
            tools:openDrawer="start"
            tools:context=".dawerlayout.DrawerActivity">
    
        <!-- Main Content -->
        <androidx.appcompat.widget.LinearLayoutCompat
                android:id="@+id/mainContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
    
            <androidx.appcompat.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="56dp"
                    app:subtitleTextColor="#FFFFFF"
                    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                    app:title="个人中心"
                    app:titleTextColor="#FFFFFF" />
    
            <RelativeLayout
                    android:id="@+id/contentContainer"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="#FFFFFF">
    
                <androidx.appcompat.widget.AppCompatTextView
                        android:id="@+id/tvContent"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="主页内容"
                        android:textSize="16sp"
                        android:textColor="#000000"
                        android:layout_centerInParent="true" />
            </RelativeLayout>
        </androidx.appcompat.widget.LinearLayoutCompat>
    
        <!-- Drawer -->
        <com.google.android.material.navigation.NavigationView
                android:id="@+id/navigationView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="start"
                android:background="#AFEEEF"
                app:headerLayout="@layout/navigationview_header"/>
    
    </androidx.drawerlayout.widget.DrawerLayout>
    

    布局文件就不过多说明了,就是简简单单,一个主页的壳子。

    3_toolbar_实现.png

    不过目前 Activity 自带的 ActionBar 还在,我们需要把它去掉

    <activity android:name=".dawerlayout.DrawerActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
    

    设置完这个属性,重启 Activity 会发现状态栏是灰色的,因此需要将状态栏的颜色改为透明,实现一个沉浸式状态栏的效果。向 Activity 中添加如下代码:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityDrawer2Binding.inflate(layoutInflater)
        setContentView(binding.root)
    
        setStatusBar()
    }
    
    private fun setStatusBar() {
        // 利用状态栏工具类
        StatusBarUtil.fitStatusLayout(this, binding.toolbar, true)
    }
    

    这里利用了一个StatusBarUtil状态栏工具类来设置沉浸式状态栏,代码文件可以在这个地址获取。

    看下沉浸式状态栏设置后的效果:

    4_沉浸式状态栏设置.png

    下一步给标题栏左部整个头像,实现点击头像可以打开抽屉的效果:

    向 Activity 中添加如下代码:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityDrawer2Binding.inflate(layoutInflater)
        setContentView(binding.root)
    
        setStatusBar()
    
        binding.toolbar.setNavigationIcon(R.drawable.icon_head)
        binding.toolbar.setNavigationOnClickListener {
            binding.drawerLayout.openDrawer(Gravity.LEFT, true)
        }
    }
    

    5_抽屉打开演示.gif

    好的,抽屉打开了,但是可以看到,抽屉打开后,抽屉的右部离屏幕右边还有一小段间隙,我们希望抽屉打开后可以占满全屏。虽然我们在布局文件已经给 NavigationView设置了 match_parent 的宽度,但DrawerLayout默认会给抽屉留有 65dp 的间隙空间,我们可以给 NavigationView 设置 -65dp 的右边距,让抽屉打开时占满全屏:

    <!-- Drawer -->
    <com.google.android.material.navigation.NavigationView
    				...
            android:layout_marginRight="-65dp"
            ... />
    

    这样抽屉打开时就可以占满全屏了。

    6_抽屉全屏演示.gif