FrameLayout의 Android 센터보기가 작동하지 않습니다.
2 개의 컨트롤이있는 FrameLayout이 있습니다.-이미지와 텍스트를 그리는 사용자 지정보기-텍스트가있는 텍스트보기
둘 다 FrameLayout의 중심에두고 싶지만 할 수 없습니다. Texview는 중앙에 잘 있으며, 내가 보이게 할 때 내 cusom view는 왼쪽에 남아 있습니다.
<FrameLayout android:id="@+id/CompassMap"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center">
<view class="com.MyView"
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="gone"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:text="CENTERED" />
</FrameLayout>
Mathias에게 저는 생성자에서 아무것도하지 않고 간단합니다.
public class MyMapView extends View {
private int xPos = 0;
private int yPos = 0;
private Bitmap trackMap;
private Matrix backgroundMatrix;
private Paint backgroundPaint;
private Bitmap position;
private Matrix positionMatrix;
private Paint positionPaint;
public MyMapView(Context context) {
super(context);
init(context, null);
}
public MyMapView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public MyMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
private void init(final Context context, AttributeSet attrs) {
backgroundMatrix = new Matrix();
backgroundPaint = new Paint();
backgroundPaint.setFilterBitmap(true);
position = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.position);
positionMatrix = new Matrix();
positionPaint = new Paint();
positionPaint.setFilterBitmap(true);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
}
@Override
protected void onDraw(Canvas canvas) {
int width = getMeasuredWidth();
int height = getMeasuredHeight();
if (trackMap!=null)
{
Bitmap resizedBitmap = Bitmap.createScaledBitmap(trackMap, height, height, true);
canvas.drawBitmap(resizedBitmap, backgroundMatrix, backgroundPaint);
}
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.translate(xPos-position.getWidth()/2, yPos-position.getHeight()/2);
canvas.drawBitmap(position, positionMatrix, positionPaint);
canvas.restore();
}
public void updatePosition(int xpos, int ypos, Bitmap trackImage)
{
xPos=xpos;
yPos=ypos;
trackMap = trackImage;
invalidate();
}
}
FrameLayout 대신 RelativeLayout을 제안합니다.
TextView를 항상 ImageView 아래에두고 싶다고 가정하면 다음 레이아웃을 사용합니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:src="@drawable/icon"
android:visibility="visible"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_below="@id/imageview"
android:gravity="center"
android:text="@string/hello"/>
</RelativeLayout>
visibility
요소의를 gone
로 설정하면 해당 요소가 소비하는 공간이 사라지고 invisible
대신 사용하면 소비되는 공간이 보존됩니다.
ImageView 위에 TextView를 두려면 간단히를 생략 android:layout_alignParentTop
하거나 false
TextView에 설정 하고 TextView에서 android:layout_below="@id/imageview"
속성을 생략하십시오 . 이렇게.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="false"
android:layout_centerInParent="true"
android:src="@drawable/icon"
android:visibility="visible"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/hello"/>
</RelativeLayout>
나는 이것이 당신이 찾고 있던 것이기를 바랍니다.
자식 뷰 의 FrameLayout
를 설정하여 중앙에 뷰를 정렬 할 수 layout_gravity
있습니다.
XML에서 :
android:layout_gravity="center"
자바 코드에서 :
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
참고 : FrameLayout.LayoutParams
다른 기존 LayoutParams를 사용 하지 마십시오.
위젯의 layout_gravity 속성의 'center_horizontal'및 'center_vertical'또는 'center'만 설정
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
tools:context=".MovieActivity"
android:id="@+id/mainContainerMovie"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#3a3f51b5"
/>
<ProgressBar
android:id="@+id/movieprogressbar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal" />
</FrameLayout>
이 순서를 따르십시오.
원하는 수의 자식을 FrameLayout
.
<FrameLayout
>
<child1
....
android:layout_gravity="center"
.....
/>
<Child2
....
android:layout_gravity="center"
/>
</FrameLayout>
그래서 열쇠는
android:layout_gravity="center"
자식 뷰에 추가 .
예를 들면 :
나는 CustomView 와 TextView 를 FrameLayout
이와 같은 중심에 두었습니다.
암호:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<com.airbnb.lottie.LottieAnimationView
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_gravity="center"
app:lottie_fileName="red_scan.json"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#ffffff"
android:textSize="10dp"
android:textStyle="bold"
android:padding="10dp"
android:text="Networks Available: 1\n click to see all"
android:gravity="center" />
</FrameLayout>
결과:
Framelayout에서 뷰를 중앙에 배치하는 데 사용할 수있는 몇 가지 트릭이 있습니다. Webview 및 Progressbar에 사용한 가장 간단한 것 (두 개체 레이아웃과 매우 유사), 방금 추가했습니다.android:layout_gravity="center"
다른 사람이 동일한 작업을 수행해야하는 경우를 대비하여 완전한 XML이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".WebviewPDFActivity"
android:layout_gravity="center"
>
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ProgressBar
android:id="@+id/progress_circular"
android:layout_width="250dp"
android:layout_height="250dp"
android:visibility="visible"
android:layout_gravity="center"
/>
</FrameLayout>
내 결과는 다음과 같습니다.
참고 URL : https://stackoverflow.com/questions/4051604/android-center-view-in-framelayout-doesnt-work
'development' 카테고리의 다른 글
DateTime.ToString ()을 사용할 때 요일 접미사 얻기 (0) | 2020.10.22 |
---|---|
Mac OS Sierra 10.12에 Nokogiri를 설치하는 방법 (0) | 2020.10.22 |
랜덤은 거의 랜덤하지 않습니까? (0) | 2020.10.22 |
Play 2.3.x 앱에서 sbt-rjs를 사용하여 WebJars에서 JS 최적화 (0) | 2020.10.22 |
Entity Framework로 작업 할 때 좋은 디자인 사례는 무엇입니까? (0) | 2020.10.22 |