저는 X 축 Y 그리드에 자식을 표시하는 사용자 정의 GroupView 클래스를 작성했습니다. 아이들은 사각형입니다.FrameLayout에서 TextView가 표시되지 않습니다.
package com.roundel.calc2;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class CalcPadLayout extends ViewGroup {
private int mRowCount;
private int mColumnCount;
public CalcPadLayout(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
final TypedArray a = context.obtainStyledAttributes(attrs,
new int[] { android.R.attr.rowCount, android.R.attr.columnCount }, defStyle, 0);
mRowCount = a.getInt(0, 1);
mColumnCount = a.getInt(1, 1);
a.recycle();
}
public CalcPadLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CalcPadLayout(Context context) {
this(context, null);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
final int paddingLeft = getPaddingLeft();
final int paddingRight = getPaddingRight();
final int paddingTop = getPaddingTop();
final int paddingBottom = getPaddingBottom();
final int childCount = getChildCount();
final int height = bottom-top-paddingBottom-paddingTop;
final int width = right-left-paddingLeft-paddingRight;
final int childSize = Math.min(Math.round(width/mColumnCount), Math.round(height/mRowCount));
/*DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels/displayMetrics.density;
float dpWidth = displayMetrics.widthPixels/displayMetrics.density;*/
int rowIndex = 0, columnIndex = 0;
for(int i = 0; i < childCount; i++)
{
View child = getChildAt(i);
final int childTop = rowIndex*childSize+paddingTop;
final int childLeft = columnIndex*childSize+paddingLeft;
final int childBottom = childTop+childSize;
final int childRight = childLeft+childSize;
//child.setGravity(Gravity.CENTER_HORIZONTAL);
child.layout(childLeft, childTop, childRight, childBottom);
rowIndex = (rowIndex + (columnIndex + 1)/mColumnCount) % mRowCount;
columnIndex = (columnIndex + 1) % mColumnCount;
}
LayoutParams params = this.getLayoutParams();
params.height = childSize*mRowCount+paddingTop+paddingBottom;
this.setLayoutParams(params);
}
}
이것은 내 main_layout.xml입니다. 그들이 제대로 표시되는 경우 내가 볼 수 있도록 나는 FrameLayouts의 배경 색상을 설정합니다, 두 FrameLayouts 내부 디스플레이 두 TextViews을 수 있습니다 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="bottom">
<com.roundel.calc2.CalcPadLayout
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:rowCount="1"
android:columnCount="2"
android:background="@color/greyDark"
android:gravity="bottom">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView"
android:gravity="center"
android:textColor="@color/white"
android:textSize="35sp"/>
</FrameLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView2"
android:gravity="center"
android:textColor="@color/white"
android:textSize="35sp"/>
</FrameLayout>
</com.roundel.calc2.CalcPadLayout>
</LinearLayout>
레이아웃이 제대로 표시되어, 그러나 텍스트 뷰가 보이지 않는 때 아무 이유없이 텍스트가 세로 및 가로로 가운데에있는 경우에만 작동하는 FrameLayout을 제거합니다.
을 내가 그 큰 이미지 미안 해요, 아무 생각 그것은 보이게하는 translationZ입니다 나중에 내가 애니메이션을 해요 때문에 나는, 레이아웃을 사용할 필요가 – RouNdeL