android - Mostrar ConstraintLayout en un DialogFragment
android-dialogfragment android-constraintlayout (1)
Esto funciona bien - echa un vistazo
1) Es una buena práctica organizar los elementos en orden cuando sea posible en XML también como se visualiza. Sólo para comprender fácilmente más tarde. 2) Se ve que todos los demás elementos se limitan a la altura y el ancho de otros, y en su mayoría se traducen en 0 de altura y anchura. Tenga cuidado con 0dp y wrap_content en LayoutParams. 3) Tome el apoyo de Vertical Bias también.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:id="@+id/clWelcomeMessage"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.constraint.Guideline
android:id="@+id/guideline_ver_16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="@dimen/sixteenDP"/>
<android.support.constraint.Guideline
android:id="@+id/guideline_ver_end_16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="@dimen/sixteenDP"/>
<TextView
android:id="@+id/welcomeMessageTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="32dp"
android:layout_marginLeft="32dp"
android:layout_marginRight="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:text="EN PERSONLIG VELKOMST"
android:textAlignment="center"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/textView5"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<android.support.constraint.Guideline
android:id="@+id/guideline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1"/>
<android.support.constraint.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2"/>
<TextView
android:id="@+id/textView5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Nu skal I definere den velkomst, som jeres gæster får i
appen.
I kan skrive navnet på brylluppet, en hlsen og har mulighed at vælge et
coverbillede"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="@+id/guideline_ver_end_16"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@+id/guideline_ver_16"
app:layout_constraintTop_toBottomOf="@+id/guideline2"/>
<TextView
android:id="@+id/textView6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:text="Du vil altid kunne ændre din opsætning af velkomsten i din
brugerprofil."
android:textAlignment="center"
app:layout_constraintBottom_toTopOf="@+id/setupNowButton"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="@+id/guideline_ver_16"
app:layout_constraintRight_toRightOf="@+id/guideline_ver_end_16"
app:layout_constraintTop_toBottomOf="@+id/textView5"/>
<Button
android:id="@+id/setupNowButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:background="@color/colorPrimaryDark"
android:text="JEG VIL OPSÆTTE DEN NU"
android:textColor="@color/White"
app:layout_constraintBottom_toTopOf="@+id/setupLaterButton"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView6"
app:layout_constraintVertical_bias="1.0"/>
<android.support.constraint.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.6"/>
<Button
android:id="@+id/setupLaterButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:text="DET GØR JEG SENERE"
android:background="@drawable/border"
android:textColor="@color/colorPrimaryDark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline6"
app:layout_constraintVertical_bias="1.0"/>
</android.support.constraint.ConstraintLayout>
Además, app:layout_constraintWidth_default="wrap"
(con el ancho establecido en 0dp ). Si está configurado, el widget tendrá el mismo tamaño que si estuviera usando wrap_content, pero estará limitado por restricciones (es decir, no se expandirá más allá de ellos). Recurso de apoyo
Espero que me puedas ayudar con un problema. Intenté buscarlo en Google y examiné los temas aquí, pero no pude encontrar una respuesta.
Recientemente cambié mis diseños a ConstraintLayouts
, y esto ha estado funcionando muy bien hasta ahora. Sin embargo, mi problema es que tuve algunos DialogFragments
mostraban un LinearLayout
, y cuando lo cambié a ConstraintLayout
solo mostraba una superposición descolorida, pero ninguno de los elementos en el diseño. Si codifico el ancho y el alto a algo como 100dp
, se mostrará esa área. Cuando intento match_parent
o cualquier otra combinación, se aplica el mismo problema. También intenté establecer la altura y el ancho de la altura y el ancho del dispositivo, pero aún así no tuve suerte.
En el onCreateView en mi CreateWeddingMetadataFragment tengo:
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Show message dialog");
FragmentManager fm = getFragmentManager();
CreateWeddingMetadataDialogFragment welcomeMessageDialog = new CreateWeddingMetadataDialogFragment();
welcomeMessageDialog.show(fm, "metadate_fragment_dialog");
welcomeMessageDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
}
});
En mi CreateWeddingMetadataFragmentDialog tengo:
public class CreateWeddingMetadataDialogFragment extends DialogFragment{
private static final String TAG = CreateWeddingMetadataDialogFragment.class.getSimpleName();
public Button setupNow, setupLater;
public TextView mTest;
public ConstraintLayout parentLayout;
private DialogInterface.OnDismissListener onDismissListener;
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "I was called");
}
public CreateWeddingMetadataDialogFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.create_welcome_message_view, container);
setupNow = (Button) view.findViewById(R.id.setupNowButton);
setupLater = (Button) view.findViewById(R.id.setupLaterButton);
mTest = (TextView) view.findViewById(R.id.welcomeMessageTitle);
parentLayout = (ConstraintLayout) view.findViewById(R.id.clWelcomeMessage);
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
parentLayout.setMinimumWidth(width);
parentLayout.setMinimumHeight(height);
mTest.setText("Test");
Log.d(TAG, "I was called onCreateView" + mTest);
setupNow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Go to metadate page (Hide this dialog)
}
});
setupLater.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Go to signin page and create the wedding
}
});
return view;
}
}
Eso es con mi intento actual de configurarlo al tamaño del dispositivo.
Y aquí está el create_welcome_message_view:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:id="@+id/clWelcomeMessage">
<Button
android:text="DET GØR JEG SENERE"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/setupLaterButton"
app:layout_constraintTop_toTopOf="@+id/guideline19"
app:layout_constraintBottom_toTopOf="@+id/guideline20"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="16dp"
android:background="@drawable/border"
android:layout_marginTop="2dp"
android:textColor="@color/colorPrimaryDark"/>
<Button
android:text="JEG VIL OPSÆTTE DEN NU"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/setupNowButton"
app:layout_constraintTop_toTopOf="@+id/guideline12"
app:layout_constraintBottom_toTopOf="@+id/guideline19"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="16dp"
android:background="@color/colorPrimaryDark"
android:layout_marginBottom="2dp"
android:textColor="@color/White"/>
<TextView
android:text="EN PERSONLIG VELKOMST"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/welcomeMessageTitle"
android:layout_marginTop="16dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginEnd="32dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="32dp"
android:layout_marginStart="32dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="32dp"
app:layout_constraintBottom_toTopOf="@+id/textView5"
android:layout_marginBottom="8dp"
android:textAlignment="center"
android:textSize="16sp"/>
<TextView
android:text="Nu skal I definere den velkomst, som jeres gæster får i appen. I kan skrive navnet på brylluppet, en hlsen og har mulighed at vælge et coverbillede"
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/textView5"
app:layout_constraintTop_toTopOf="@+id/guideline14"
android:layout_marginEnd="32dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="32dp"
app:layout_constraintBottom_toTopOf="@+id/textView6"
android:layout_marginBottom="8dp"
android:layout_marginStart="32dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="32dp"
android:textAlignment="center"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline12"
android:orientation="horizontal"
tools:layout_editor_absoluteY="204dp"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintGuide_percent="0.4"/>
<TextView
android:text="Du vil altid kunne ændre din opsætning af velkomsten i din brugerprofil."
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/textView6"
app:layout_constraintBottom_toTopOf="@+id/guideline12"
android:layout_marginBottom="8dp"
app:layout_constraintTop_toTopOf="@+id/guideline15"
android:layout_marginStart="32dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="32dp"
android:layout_marginEnd="32dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="32dp"
android:textAlignment="center"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintVertical_bias="1.0"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline14"
android:orientation="horizontal"
tools:layout_editor_absoluteY="51dp"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintGuide_percent="0.1"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline15"
android:orientation="horizontal"
tools:layout_editor_absoluteY="153dp"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintGuide_percent="0.3"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline19"
android:orientation="horizontal"
tools:layout_editor_absoluteY="255dp"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintGuide_percent="0.5"/>
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline20"
android:orientation="horizontal"
tools:layout_editor_absoluteY="305dp"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintGuide_percent="0.6"/>
</android.support.constraint.ConstraintLayout>
Si necesita información adicional, hágamelo saber y gracias de antemano.