【问题标题】:Dialog custom title to match non-custom title对话框自定义标题以匹配非自定义标题
【发布时间】:2015-05-21 13:02:37
【问题描述】:

我的一个对话框有一个非自定义标题:

NameDialog.java

public class NameDialog extends DialogFragment {
    @Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        return builder.setTitle(R.string.name)
                .setView(inflater.inflate(R.layout.name_dialog, null))
                .setPositiveButton(R.string.next, null)
                .create();
    }
}

name_dialog.xml

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

    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>

这是它的样子:

我的一个对话框有一个带有演员图标的自定义标题。 PlayersDialog.java

public class PlayersDialog extends DialogFragment {
    @Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        return builder
                .setCustomTitle(inflater.inflate(R.layout.players_title_dialog, null))
                .setView(inflater.inflate(R.layout.players_dialog, null))
                .setPositiveButton(R.string.start_game, null)
                .create();
    }
}

players_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".PlayersDialog">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

    <ListView
        android:id="@+id/players"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="false"/>

</RelativeLayout>

players_title_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal"
              tools:context=".PlayersDialog">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="@string/players"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_marginLeft="5dp"/>

    <android.support.v7.app.MediaRouteButton
        android:id="@+id/media_route_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:mediaRouteTypes="user"
        android:visibility="gone"/>

</RelativeLayout>

这是它的样子:

我只希望两个对话框的格式一致。

【问题讨论】:

  • 如果您希望它们保持一致,您将不得不为两个对话框使用相同的布局。
  • @KristyWelsh 这不是问题。不一致的标题是问题
  • 您在第一种情况下使用默认标题设置,但在第二种情况下使用自定义标题,因此它采用不同的设置。

标签: android chromecast android-dialogfragment custom-titlebar android-cast-api


【解决方案1】:

在您的 players_title_dialog.xml 文件中,将播放器 textView 替换为以下内容

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:text="@string/players"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#3db6e3"
        android:layout_marginLeft="10dp"/>

并且可能是字体大小可以减少 1dp 并且可以在您的列表中添加 3px 的填充

【讨论】:

  • 有没有办法引用颜色和边距,这样就不会硬编码了?
  • 其实没有任何参考,因为android源码是对所有人开放的,任何人都可以很容易地找到规范并重用它。从android源你还可以看到默认alertDialog的字体/边距等。然后您可以自定义创建自己的并重用它。在这里您可以找到默认的 AlertDialog 规范:stackoverflow.com/questions/2422562/…
  • 你在哪里找到值“3db6e3”?
  • 我刚刚使用颜色选择器从默认 alertDialog 的标题颜色中选择了它。这里没有任何官方信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2010-12-28
  • 2011-04-23
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多