ConstraintLayout 显示后制动 Android Studio
ConstraintLayout braking after displaying Android Studio
我目前正在开发一个 android 应用程序,但我遇到了 显示 XML 布局 的问题
在 Android Studio 中,一切看起来都很好,但在 VM 中看起来不太好。
这是在 Android Studio 中的样子:
下面是它在 VM 中显示时的样子:
我应该提一下,它应该是一个弹出窗口 window
这里是XML代码:
<androidx.constraintlayout.widget.ConstraintLayout 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="350dp"
android:layout_height="265dp"
android:background="@drawable/rounded_corners_grey"
android:padding="20dp"
>
<android.widget.Button
android:text="Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Cancel"
android:background="@android:color/transparent"
android:textColor="@color/white"
android:outlineProvider="none"
app:layout_constraintTop_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="48dp"
android:layout_marginStart="56dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0" />
<android.widget.Button
android:text="Set"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/SaveTimer"
android:background="@drawable/rounded_corners_dark"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/Cancel"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="56dp"
app:layout_constraintTop_toTopOf="@+id/Cancel"
app:layout_constraintVertical_bias="0.0" />
<View
android:layout_width="300dp"
android:layout_height="100dp"
android:id="@+id/TimerValluesBackground"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="24dp"
android:clickable="false"
android:background="@drawable/rounded_corners_dark"
tools:ignore="MissingConstraints"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.32" />
<TextView
android:text="0 h"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/hourValue"
android:textSize="22dp"
android:textColor="#fff"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="@+id/TimerValluesBackground"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
android:layout_marginStart="32dp"
app:layout_constraintVertical_bias="0.514" />
<TextView
android:text="0 min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/minuteValue"
android:textSize="22dp"
android:textColor="#fff"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toEndOf="@+id/hourValue"
app:layout_constraintEnd_toStartOf="@+id/secondValue"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground" />
<TextView
android:text="0 sec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/secondValue"
android:textSize="22dp"
android:textColor="#fff"
tools:layout_editor_absoluteX="231dp"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
tools:ignore="MissingConstraints"
app:layout_constraintVertical_bias="0.514" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是来自 Main Activity 的代码:
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.TransitionDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
public class MainActivity extends AppCompatActivity {
private String ipAddress = "192.168.1.59";
private int port = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setting background color
View view = this.getWindow().getDecorView();
view.setBackgroundColor(Color.rgb(30,30,30));
// hiding bottom navigation bar
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
// Initiation request
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume").execute();
// Click event for Volume Up button
ImageButton VolumeUp = (ImageButton) findViewById(R.id.VolumeUpButton);
VolumeUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume up").execute();
}
});
// Click event for Volume Down button
ImageButton VolumeDown = (ImageButton) findViewById(R.id.VolumeDownButton);
VolumeDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume down").execute();
}
});
// Click event for Volume Up Lot button (lot means volume does up for about 33 %)
ImageButton VolumeUpLot = (ImageButton) findViewById(R.id.VolumeUpLotButton);
VolumeUpLot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume up lot").execute();
}
});
// Click event for Volume Down Lot button (lot means volume does down for about 33 %)
ImageButton VolumeDownLot = (ImageButton) findViewById(R.id.VolumeDownLotButton);
VolumeDownLot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume down lot").execute();
}
});
// Click event for ScreenShot Button
ImageView ScreenShotButton = (ImageView) findViewById(R.id.ScreenShotButton);
ScreenShotButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"screenshot").execute();
}
});
// Click event for Lock Button
ImageView LockScreenButton = (ImageView) findViewById(R.id.LockScreenButton);
LockScreenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"lock").execute();
}
});
// Click event for Mute Button
ImageView MuteButton = (ImageView) findViewById(R.id.MuteButton);
MuteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"mute").execute();
}
});
// Enter press event for ippAddress input
EditText ipAddressInput = (EditText) findViewById(R.id.ipAddress);
ipAddressInput.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
ipAddress = ipAddressInput.getText().toString();
Log.i("Ip Address changed", String.valueOf(ipAddress));
return true;
}
return false;
}
});
// Enter press event for port input
EditText portInput = (EditText) findViewById(R.id.port);
portInput.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
port = Integer.parseInt(portInput.getText().toString());
Log.i("Port changed", String.valueOf(port));
return true;
}
return false;
}
});
// Click event for Shutdown scheduler
ImageView shutdownScheduler = (ImageView) findViewById(R.id.ShutdownTimer);
View parent = (View) findViewById(R.id.ParentViewFroPopUp);
parent.setClickable(false);
//Overlay animation init
///TransitionDrawable transition = (TransitionDrawable) parent.getBackground();
shutdownScheduler.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
// treba dorobit to dialogove okno a tam mat nastavenia a vlastne tlacidlo na zrusenie timeru
//int time = 2000;
//new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"timer " + time).execute();
LayoutInflater layoutInflater
= (LayoutInflater)getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup,null );
final PopupWindow popupWindow = new PopupWindow(
popupView,
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setOverlapAnchor(true);
Button btnDismiss = (Button)popupView.findViewById(R.id.Cancel);
btnDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popupWindow.dismiss();
parent.setBackgroundColor(Color.parseColor("#00000000"));
//transition.reverseTransition(5000);
}});
//transition.startTransition(5000);
popupWindow.showAtLocation(parent, Gravity.CENTER,0, 0);
parent.setBackgroundColor(Color.parseColor("#90000000"));
}});
}
}
尝试添加,
app:layout_constraintEnd_toEndOf="@+id/TimerValluesBackground"
最后一个 TextView
(@+id/secondValue
) 组件。
在您的实现中,您忘记了向您的视图添加一些约束。
为了让它们按照您的意愿显示,请尽可能添加所有四个约束。
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:background="@color/quantum_black_100"
android:padding="20dp">
<android.widget.Button
android:id="@+id/Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginTop="48dp"
android:background="@android:color/transparent"
android:outlineProvider="none"
android:text="Cancel"
android:textColor="@color/places_text_white_alpha_26"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/SaveTimer"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/TimerValluesBackground" />
<android.widget.Button
android:id="@+id/SaveTimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="56dp"
android:text="Set"
android:textColor="@color/quantum_white_100"
app:layout_constraintBottom_toBottomOf="@+id/Cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/Cancel"
app:layout_constraintTop_toTopOf="@+id/Cancel" />
<View
android:id="@+id/TimerValluesBackground"
android:layout_width="300dp"
android:layout_height="100dp"
android:layout_marginTop="24dp"
android:clickable="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/hourValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 h"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toStartOf="@+id/minuteValue"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="@+id/TimerValluesBackground"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground" />
<TextView
android:id="@+id/minuteValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 min"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toStartOf="@+id/secondValue"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/hourValue"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground" />
<TextView
android:id="@+id/secondValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 sec"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toEndOf="@+id/TimerValluesBackground"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/minuteValue"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
我目前正在开发一个 android 应用程序,但我遇到了 显示 XML 布局 的问题 在 Android Studio 中,一切看起来都很好,但在 VM 中看起来不太好。
这是在 Android Studio 中的样子:
下面是它在 VM 中显示时的样子:
我应该提一下,它应该是一个弹出窗口 window
这里是XML代码:
<androidx.constraintlayout.widget.ConstraintLayout 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="350dp"
android:layout_height="265dp"
android:background="@drawable/rounded_corners_grey"
android:padding="20dp"
>
<android.widget.Button
android:text="Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Cancel"
android:background="@android:color/transparent"
android:textColor="@color/white"
android:outlineProvider="none"
app:layout_constraintTop_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="48dp"
android:layout_marginStart="56dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.0" />
<android.widget.Button
android:text="Set"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/SaveTimer"
android:background="@drawable/rounded_corners_dark"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/Cancel"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="56dp"
app:layout_constraintTop_toTopOf="@+id/Cancel"
app:layout_constraintVertical_bias="0.0" />
<View
android:layout_width="300dp"
android:layout_height="100dp"
android:id="@+id/TimerValluesBackground"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="24dp"
android:clickable="false"
android:background="@drawable/rounded_corners_dark"
tools:ignore="MissingConstraints"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.32" />
<TextView
android:text="0 h"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/hourValue"
android:textSize="22dp"
android:textColor="#fff"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="@+id/TimerValluesBackground"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
android:layout_marginStart="32dp"
app:layout_constraintVertical_bias="0.514" />
<TextView
android:text="0 min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/minuteValue"
android:textSize="22dp"
android:textColor="#fff"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toEndOf="@+id/hourValue"
app:layout_constraintEnd_toStartOf="@+id/secondValue"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground" />
<TextView
android:text="0 sec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/secondValue"
android:textSize="22dp"
android:textColor="#fff"
tools:layout_editor_absoluteX="231dp"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
tools:ignore="MissingConstraints"
app:layout_constraintVertical_bias="0.514" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是来自 Main Activity 的代码:
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.TransitionDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
public class MainActivity extends AppCompatActivity {
private String ipAddress = "192.168.1.59";
private int port = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setting background color
View view = this.getWindow().getDecorView();
view.setBackgroundColor(Color.rgb(30,30,30));
// hiding bottom navigation bar
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
// Initiation request
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume").execute();
// Click event for Volume Up button
ImageButton VolumeUp = (ImageButton) findViewById(R.id.VolumeUpButton);
VolumeUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume up").execute();
}
});
// Click event for Volume Down button
ImageButton VolumeDown = (ImageButton) findViewById(R.id.VolumeDownButton);
VolumeDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume down").execute();
}
});
// Click event for Volume Up Lot button (lot means volume does up for about 33 %)
ImageButton VolumeUpLot = (ImageButton) findViewById(R.id.VolumeUpLotButton);
VolumeUpLot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume up lot").execute();
}
});
// Click event for Volume Down Lot button (lot means volume does down for about 33 %)
ImageButton VolumeDownLot = (ImageButton) findViewById(R.id.VolumeDownLotButton);
VolumeDownLot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"volume down lot").execute();
}
});
// Click event for ScreenShot Button
ImageView ScreenShotButton = (ImageView) findViewById(R.id.ScreenShotButton);
ScreenShotButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"screenshot").execute();
}
});
// Click event for Lock Button
ImageView LockScreenButton = (ImageView) findViewById(R.id.LockScreenButton);
LockScreenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"lock").execute();
}
});
// Click event for Mute Button
ImageView MuteButton = (ImageView) findViewById(R.id.MuteButton);
MuteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"mute").execute();
}
});
// Enter press event for ippAddress input
EditText ipAddressInput = (EditText) findViewById(R.id.ipAddress);
ipAddressInput.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
ipAddress = ipAddressInput.getText().toString();
Log.i("Ip Address changed", String.valueOf(ipAddress));
return true;
}
return false;
}
});
// Enter press event for port input
EditText portInput = (EditText) findViewById(R.id.port);
portInput.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
port = Integer.parseInt(portInput.getText().toString());
Log.i("Port changed", String.valueOf(port));
return true;
}
return false;
}
});
// Click event for Shutdown scheduler
ImageView shutdownScheduler = (ImageView) findViewById(R.id.ShutdownTimer);
View parent = (View) findViewById(R.id.ParentViewFroPopUp);
parent.setClickable(false);
//Overlay animation init
///TransitionDrawable transition = (TransitionDrawable) parent.getBackground();
shutdownScheduler.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
// treba dorobit to dialogove okno a tam mat nastavenia a vlastne tlacidlo na zrusenie timeru
//int time = 2000;
//new ConnectionWithServer((Activity) MainActivity.this,MainActivity.this,ipAddress,port,"timer " + time).execute();
LayoutInflater layoutInflater
= (LayoutInflater)getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup,null );
final PopupWindow popupWindow = new PopupWindow(
popupView,
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setOverlapAnchor(true);
Button btnDismiss = (Button)popupView.findViewById(R.id.Cancel);
btnDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
popupWindow.dismiss();
parent.setBackgroundColor(Color.parseColor("#00000000"));
//transition.reverseTransition(5000);
}});
//transition.startTransition(5000);
popupWindow.showAtLocation(parent, Gravity.CENTER,0, 0);
parent.setBackgroundColor(Color.parseColor("#90000000"));
}});
}
}
尝试添加,
app:layout_constraintEnd_toEndOf="@+id/TimerValluesBackground"
最后一个 TextView
(@+id/secondValue
) 组件。
在您的实现中,您忘记了向您的视图添加一些约束。 为了让它们按照您的意愿显示,请尽可能添加所有四个约束。
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
android:background="@color/quantum_black_100"
android:padding="20dp">
<android.widget.Button
android:id="@+id/Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:layout_marginTop="48dp"
android:background="@android:color/transparent"
android:outlineProvider="none"
android:text="Cancel"
android:textColor="@color/places_text_white_alpha_26"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/SaveTimer"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/TimerValluesBackground" />
<android.widget.Button
android:id="@+id/SaveTimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="56dp"
android:text="Set"
android:textColor="@color/quantum_white_100"
app:layout_constraintBottom_toBottomOf="@+id/Cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/Cancel"
app:layout_constraintTop_toTopOf="@+id/Cancel" />
<View
android:id="@+id/TimerValluesBackground"
android:layout_width="300dp"
android:layout_height="100dp"
android:layout_marginTop="24dp"
android:clickable="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/hourValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 h"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toStartOf="@+id/minuteValue"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/TimerValluesBackground"
app:layout_constraintStart_toStartOf="@+id/TimerValluesBackground"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground" />
<TextView
android:id="@+id/minuteValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 min"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toStartOf="@+id/secondValue"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/hourValue"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground" />
<TextView
android:id="@+id/secondValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0 sec"
android:textColor="#fff"
android:textSize="22dp"
app:layout_constraintBottom_toBottomOf="@+id/TimerValluesBackground"
app:layout_constraintEnd_toEndOf="@+id/TimerValluesBackground"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/minuteValue"
app:layout_constraintTop_toTopOf="@+id/TimerValluesBackground"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>