我希望根据Android Studio 2.1中的代码示例,根据默认的“空活动”将小文本置于屏幕中央。
我今天使用的布局xml文件如下所示。我通过import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.imageio.ImageIO;
import java.io.File;
class jframeExample {
public static BufferedImage getImageData(
Component component) {
BufferedImage image = new BufferedImage(
component.getWidth(),
component.getHeight(),
BufferedImage.TYPE_INT_RGB
);
component.printAll( image.createGraphics() );
return image;
}
static Robot robot = null;
public static void main(String[] args){
Runnable r = new Runnable() {
public void run() {
try {
if(robot == null) robot = new Robot();
} catch (AWTException e1) {
e1.printStackTrace();
}
final JFrame f = new JFrame("JFrame Border");
f.setLayout(new BorderLayout());
f.setLocation(500,300);
f.setSize(560, 420);
f.getContentPane().setBackground(Color.BLUE);
JMenuItem screenshot =
new JMenuItem("TakeSnapshot");
screenshot.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent ae) {
new Thread(() -> {
try {
Thread.sleep(100);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
int screenshotX = f.getContentPane().getLocationOnScreen().x;
int screenshotY = f.getContentPane().getLocationOnScreen().y;
int screenshotWidth = f.getContentPane().getWidth();
int screenshotHeight = f.getContentPane().getHeight();
BufferedImage imageOutput = robot.createScreenCapture(new Rectangle(screenshotX, screenshotY, screenshotWidth, screenshotHeight));
try {
// write the image as a PNG
ImageIO.write(
imageOutput,
"png",
new File("CapturedImage.png"));
} catch(Exception e) {
e.printStackTrace();
}
}).start();
}
} );
JMenu menu = new JMenu("Menu");
menu.add(screenshot);
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
f.setJMenuBar(menuBar);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
正常地在OnCreate
方法中对它进行充气,因此xml中定义的布局不会填满整个屏幕。因此,setContentView
会将我的文本置于父级中心,但不会居中于屏幕中心。如何让我的文字在屏幕上居中,同时保持我的操作栏?
问题说明 以父母为中心导致“不良”的位置。以屏幕为中心会给出“好”的位置。
main_activity.xml
layout_centerInParent
答案 0 :(得分:1)
使用例如CoordinatorLayout。这种布局中的元素与它们之间没有关系,因此可以是一个在另一个上。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:id="@+id/root_layout"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="?attr/actionBarSize"
android:text="Text not in center">
</TextView>
</RelativeLayout>
<!-- This is centered TextView -->
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="?attr/actionBarSize"
android:text="Text in center"
>
</TextView>
</android.support.design.widget.CoordinatorLayout>
两件重要的事情:
以编程方式计算屏幕和设置位置不是好主意,例如当用户旋转屏幕时,这可能会导致不想要的问题。
答案 1 :(得分:0)
您可以通过
获取屏幕的真实尺寸 DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
displayMetrics.widthPixels; //screen width
displayMetrics.heightPixels; //screen height
然后
LayoutParams layoutParams = new LayoutParams(int width, int height);
layoutParams.setMargins(int left, int top, int right, int bottom);
viewToCenter.setLayoutParams(layoutParams);