沉浸式狀態欄Toast文字錯位

在APP裏設置了沉浸式狀態欄之後出現了一個問題,Toast裏的文字位置出現了偏移,這時候就須要自定義Toast的樣式來將文字設置居中。android

public class ToastUtil {
    private static Toast mToast = null;

    public static void show(Context context, String message) {
        show(context, message, Toast.LENGTH_SHORT);
    }

    private static Handler mHandler = new Handler();
    private static Runnable runnable = new Runnable() {
        @Override
        public void run() {
            if (mToast != null) {
                mToast.cancel();
            }
        }
    };

    public static void show(Context context, String message, int duration) {
        mHandler.removeCallbacks(runnable);
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.toast_lay, null);
        TextView str = (TextView) view.findViewById(R.id.toast_content);

        str.setAlpha(0.9f);
        str.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.shape_toast_bg));
        str.setText(message);
        mToast = new Toast(context);
        mToast.setView(view);
        mToast.show();
        mHandler.postDelayed(runnable, 1500);
    }

}

XML佈局R.layout.toast_layide

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="10dp"
    >

    <TextView
        android:id="@+id/toast_content"
        android:text="aaa"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

Syte樣式R.drawable.shape_toast_bg佈局

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

    <!--顏色-->
    <solid android:color="@color/chat_select_self"/>
    <!--內邊距-->
    <!--<padding-->
    <!--android:bottom="20dp"-->
    <!--android:left="20dp"-->
    <!--android:right="20dp"-->
    <!--android:top="20dp"/>-->

    <corners android:topLeftRadius="10dp"
        android:topRightRadius="10dp"
        android:bottomRightRadius="10dp"
        android:bottomLeftRadius="10dp"/>
    <!--設置圓角-->
    <corners android:radius="10dip"/>
    <!--stroke設置描邊-->
    <!--<stroke-->
    <!--android:width="2dp"-->
    <!--android:color="@android:color/darker_gray"/>-->
</shape>

可是這設置不了內邊距我很苦惱,設置padding沒效果post

 

今天更新下解決方法ui

出現toast背景與提示文字錯位的現象,應該是在style裏面theme中加入了.net

<item name="android:fitsSystemWindows">true</item>

其實這句不須要也能夠實現沉浸式的效果,刪去以後toast就正常顯示了;code

可是 刪除的話又會 出現標題欄欄置頂和導航欄重疊了xml

能夠在根佈局內設置blog

android:fitsSystemWindows="true"

可是若是咱們activity比較多,每個頁面都添加android:fitsSystemWindows="true" 比較麻煩,咱們須要改動一下:繼承

在Base類中設置

ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);
View parentView = contentFrameLayout.getChildAt(0);
if (parentView != null && Build.VERSION.SDK_INT >= 14) {
    parentView.setFitsSystemWindows(true);
}

而後全部的 須要類 繼承他就能夠了;

而後須要沉浸狀態欄的activity的佈局文件中就能夠把android:fitsSystemWindows="true"這行代碼給省略了!

 

參考資料

相關文章
相關標籤/搜索