java - 为什么 child 会被夹在定制的 toast 里?

标签 java android toast

我想创建自定义 toast,其中一个 View 有点脱离父 View 。所以我做了这样的事情

这是我定制的 toast

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/toast_root"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="50dp"
    android:background="#000000"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:padding="15dp">

    <TextView
        android:id="@+id/digit_display"
        android:layout_width="96dp"
        android:layout_height="96dp"
        android:layout_marginTop="-24dp"
        android:layout_marginEnd="15dp"
        android:layout_marginBottom="24dp"
        android:background="@drawable/round_button"
        android:gravity="center"
        android:text="1"
        android:textSize="64sp" />

    <TextView
        android:id="@+id/description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="TextView"
        android:textColor="#FFFFFF"
        android:textSize="18sp"
        android:textStyle="bold" />
</LinearLayout>

round_button.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="oval">
            <solid android:color="#000000"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="#2C2C2C"/>
        </shape>
    </item>
</selector>

在java代码中我像这样使用它

LayoutInflater li = getLayoutInflater();
View v = li.inflate(R.layout.toast, null);
TextView numberView = v.findViewById(R.id.digit_display);
TextView descriptionView = v.findViewById(R.id.description);
numberView.setText(number);
descriptionView.setText(description);

Toast t = new Toast(getApplicationContext());
t.setDuration(Toast.LENGTH_LONG);
t.setView(v);
t.show();

我可以看到我的 toast 。但是 digit_display TextView 被从顶部剪掉,但我希望看到它脱离 toast(就在该 View 的顶部)。我怎样才能实现它?如果这不起作用。

已编辑 我试图理解为什么这个例子不起作用,当我在其他项目中使用类似的结构时,简单的形式它就可以工作。

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="25dp"
        android:background="@drawable/form_desing"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="25dp">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="-50dp"
            android:layout_marginBottom="50dp"
            android:foreground="@drawable/clover_"
            android:contentDescription="@string/fourbit_clover_icon" />

        <include layout="@layout/email_input" />
        <include layout="@layout/password_input" />
        <include layout="@layout/buttons" />
    </LinearLayout>

有什么想法吗?

最佳答案

将最外层的 Layout 视为 Toast 的 Root View ,并在其中排列项目。您不限于只能使用一个 LinearLayoutRelativeLayout 。不要尝试从 Root View 退出:它会被剪切。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="top|center">

    <LinearLayout
        android:layout_height="50dp"
        android:layout_width="wrap_content"
        android:orientation="horizontal"/>

    <RelativeLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">

        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="200dp"
            android:orientation="vertical"
            android:gravity="center"
            android:padding="15dp"
            android:background="#0A93E1"
            android:minHeight="100dp"
            android:layout_marginTop="30dp">

        </LinearLayout>

        <TextView
            android:layout_height="60dp"
            android:layout_width="60dp"
            android:text="Text"
            android:id="@+id/digit_display"
            android:background="@drawable/round_button"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:textColor="#FFFFFF"/>

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="Text"
            android:id="@+id/description"
            android:layout_below="@id/digit_display"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:textColor="#FFFFFF"/>

    </RelativeLayout>

</LinearLayout>



photo

关于java - 为什么 child 会被夹在定制的 toast 里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985590/

相关文章:

android - 如何取消在android上以不同方法创建的Toast?

java - 五个数字中最大的

Android:向新 Activity 添加多个 Bundle

javascript - Android4.1和iOS环境下的window.open()

javascript - 解析云代码request.object.get(key)返回总是undefined

Android - 在 View 下方显示 toast ?

Java, JDBC : Does closing a PreparedStatement also free up its memory footprint in the database connection?

java - 智能 : Tests not started

java - 为什么无法解析符号 TransactionWriteRequest 或 TransactionLoadRequest?

notifications - gtk 应用内通知 API 引用