我的工具栏太高了,因为它看起来很丑,下面的屏幕被裁剪了,我该如何解决?

Posted

技术标签:

【中文标题】我的工具栏太高了,因为它看起来很丑,下面的屏幕被裁剪了,我该如何解决?【英文标题】:My ToolBar is too high and because of that it looks ugly and the screen below is cropped, how do I fix it? 【发布时间】:2019-11-29 07:06:30 【问题描述】:

这是我的工具栏 screen.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_
android:layout_
android:orientation="vertical">

    <LinearLayout
    android:id="@+id/container_toolbar"
    android:layout_
    android:layout_
    android:orientation="vertical">
    <!-- Include your Toolbar -->
    <include
        android:id="@+id/mytoolbar"
        layout="@layout/toolbar" />
</LinearLayout>

<FrameLayout
    android:id="@+id/container_body"
    android:layout_
    android:layout_
    android:layout_weight="1">
    <!-- Embed your fragment in a Layout View-->
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_
        tools:context="com.example.Activities.MenuActivity"
        />
</FrameLayout>
 </LinearLayout>

它在您的手机上的外观: 可以看到工具栏太高了。 清单:

<activity
        android:name="com.example.Activities.MenuActivity"
        android:label="@string/title_activity_test"
        tools:ignore="InnerclassSeparator" />
    <activity

样式.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

MenuActivity.class

setContentView(R.layout.activity_menu);
    Toolbar toolbar = findViewById(R.id.mytoolbar);
    setSupportActionBar(toolbar);
    Drawer(toolbar,MenuActivity.this,MenuActivity.this);

    if (getSupportActionBar() != null) 
        getSupportActionBar().setTitle("Аппараты");
    

空抽屉:

public void  Drawer(Toolbar toolbar, Context context, android.app.Activity activity)


    DatabaseReference rootRef2 = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef2 = rootRef2.child("users").child(getUid());
    ValueEventListener valueEventListener2 = new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            String email = dataSnapshot.child("account").getValue(String.class);
            String Avatar = dataSnapshot.child("Avatar").getValue(String.class);
            Long coinsAmount = dataSnapshot.child("coinsAmount").getValue(Long.class);

            String coinsView = "Баланс: " + coinsAmount;




                if (Avatar.equals("1")) 
                    avatar = (R.drawable.a1);
                
                if (Avatar.equals("2")) 
                    avatar = (R.drawable.a2);
                


            IProfile profile = new ProfileDrawerItem()
                    .withName(email)
                    .withEmail(coinsView)
                    .withIcon(avatar);

            AccountHeader headerResult = new AccountHeaderBuilder()
                    .withActivity(activity)
                    .withHeaderBackground(R.drawable.account_header_background)
                    .addProfiles(
                            profile
                    )
                    .build();


               result = new DrawerBuilder()
                    .withActivity(activity)
                    .withToolbar(toolbar)
                    .withAccountHeader(headerResult)
                    .addDrawerItems(
                            new PrimaryDrawerItem()
                                    .withName("Устройства")
                                    .withIcon(R.drawable.device)
                                    .withIdentifier(1)
                    )
                    .addDrawerItems(
                            new PrimaryDrawerItem()
                                    .withName("Сканер")
                                    .withIcon(R.drawable.scaner)
                                    .withIdentifier(2)
                    )
                    .addDrawerItems(
                            new PrimaryDrawerItem()
                                    .withName("Магазины")
                                    .withIcon(R.drawable.shop)
                                    .withIdentifier(3)
                    )
                    .addDrawerItems(
                            new PrimaryDrawerItem()
                                    .withName("Купоны")
                                    .withIcon(R.drawable.coupons)
                                    .withIdentifier(4)
                    )
                    .addDrawerItems(
                            new PrimaryDrawerItem()
                                    .withName("Архив Купонов")
                                    .withIcon(R.drawable.oldcoupons)
                                    .withIdentifier(5)
                    )
                    .withOnDrawerItemClickListener((view, i, iDrawerItem) -> 
                        if(iDrawerItem.getIdentifier() == 1 && !Activity.equals("Menu"))
                            Intent intent = new Intent(context,MenuActivity.class);
                            startActivity(intent);
                        
                        else if(iDrawerItem.getIdentifier() == 2 && !Activity.equals("Scaner"))
                            Intent intent = new Intent(context,DecoderActivity.class);
                            startActivity(intent);
                        
                        else if(iDrawerItem.getIdentifier() == 3 && !Activity.equals("Shop"))
                            Intent intent = new Intent(context,ShopActivity.class);
                            startActivity(intent);
                        
                        else if(iDrawerItem.getIdentifier() == 4 && !Activity.equals("oldCoupons"))
                            Intent intent = new Intent(context,oldCouponsActivity.class);
                            startActivity(intent);
                        

                        return false;
                    )
                    .build();

            Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(false);
            Objects.requireNonNull(result.getActionBarDrawerToggle()).setDrawerIndicatorEnabled(true);

        

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) 

        

    ;
    uidRef2.addValueEventListener(valueEventListener2);





如何解决它,我们又该如何解决?我长期以来一直试图修复它,我使用了 android:fitsSystemWindows="true" 并且我仍然没有帮助只有在您重新启动活动时才第一次切断活动就可以了。我得出的结论是,这可能是由于 firebase 造成的,但是如何解决这个问题并最终解决这个问题我无法解决

工具栏.xml

<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:iosched="http://schemas.android.com/apk/res-auto"


android:id="@+id/toolbar_actionbar"
android:layout_
android:layout_
android:background="@color/grey_500"
android:minHeight="?attr/actionBarSize"

android:theme="?attr/actionBarTheme" />

【问题讨论】:

分享你的toolbar.xml @KrishnaSharma 抱歉我忘了我现在添加了 @dimen/materialize_toolbar 也分享这个 你应该使用android:layout_height="?attr/actionBarSize" @KrishnaSharma 56dp 【参考方案1】:

尝试将android:fitsSystemWindows="true" 设置为您的基本线性布局。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:orientation="vertical">

更新 - 最终奏效的答案是使用CoordinatorLayout 作为基本布局。

P.S - 对于将来看到这个问题的任何人来说,其他可能的考虑因素是,

使用&lt;item name="android:fitsSystemWindows"&gt;true&lt;/item&gt;在主题中设置它 将其值设置为 false 而不是 true。这不合逻辑,但我看到人们说这有时会起作用 确保您的android:minHeight="?attr/actionBarSize" 中有Toolbar 可能值得将 container_toolbar LinearLayout 完全替换为您的 Toolbar 并将 fitsSystemWindows 设置为 true。 使用CoordinatorLayoutDrawerLayout 基本布局。他们应该以不同于其他“基本”布局的方式处理 fitsSystemWindows。 考虑建议here 的过多方法 如果所有其他方法都失败了,那么您可以覆盖 fitSystemWindows(Rect insets) 以按照 official docs 的建议获得所需的布局。

【讨论】:

尝试使用&lt;item name="android:fitsSystemWindows"&gt;true&lt;/item&gt;在主题中设置它? 另外,尝试将其设置为 false。我知道这不合逻辑,但我看到人们说这有时会奏效。 另外,确保您的Toolbar 中有android:minHeight="?attr/actionBarSize" 尝试here建议的多种方式。 没有问题,您找到解决方案了吗? (P.S- 如果有帮助,请点赞,干杯)【参考方案2】:

尝试简化您的布局。将工具栏和片段放在 LinearLayout 中

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_
android:layout_
android:orientation="vertical">

    <include
        android:id="@+id/mytoolbar"
        layout="@layout/toolbar" />

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_
        android:layout_
        tools:context="com.example.Activities.MenuActivity"
        />

</LinearLayout>

【讨论】:

不幸的是,这对我也没有帮助

以上是关于我的工具栏太高了,因为它看起来很丑,下面的屏幕被裁剪了,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

我的 iOS 应用程序中的键盘在 iPhone 6 上太高了。如何在 XCode 中调整键盘的分辨率?

Keras CNN 精度要么是静态的,要么对于图像分类来说太高了

p2p项目,自己期望太高了。

屏幕太高 (android)

Java程序占用内存太高了怎么办?

提示在 TextInputLayout 中的位置太高