여러 화면을 지원하는 안드로이드에서 퍼즐을위한 UI를 만드는 데 문제가 있습니다! 원하는 퍼즐이 같은 것입니다 :. 각 셀에서 내가의 GridView를 사용여러 화면에서 퍼즐을 만들기위한 안드로이드 gridview
및 설정 이미지 (각 셀은 별개의 이미지가) 나는 (이 세포를 얼마나 세트 GRIDVIEW의 크기와 모르는 Row Height/Col Width)를 사용하지 않아도됩니다. 1 화면 비율과 세포에서 스트레칭한다
내가 무슨 짓을 : :( 이미지가 하나 있습니다.
row_grid.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="300dp"
android:layout_height="100dp"
android:padding="0dp" >
<ImageView
android:id="@+id/item_image"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="fitXY"
android:src="@drawable/icon2" >
</ImageView>
</FrameLayout>
Activity_main.xml
<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"
android:background="@drawable/katy">
<GridView
android:id="@+id/gridView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:horizontalSpacing="0dp"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="0dp" >
</GridView>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="TextView"
android:textSize="30sp" />
</FrameLayout>
MainActivity.java
package com.example.test;
import java.util.ArrayList;
import android.R.dimen;
import android.R.integer;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.TextView;
public class MainActivity extends Activity {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Remove App TitleBar
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView txt = (TextView) findViewById(R.id.textView1);
txt.setText(Integer.toString(width)+" x "+Integer.toString(height));
Bitmap block = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon1);
Bitmap block2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon2);
Bitmap block3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon3);
Bitmap block4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon4);
gridArray.add(new Item(block));
gridArray.add(new Item(block2));
gridArray.add(new Item(block3));
gridArray.add(new Item(block4));
gridView = (GridView) findViewById(R.id.gridView1);
ViewGroup.LayoutParams layoutParams = gridView.getLayoutParams();
layoutParams.height = 300; //this is in pixels
layoutParams.width = 300; //this is in pixels
gridView.setLayoutParams(layoutParams);
customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray);
gridView.setAdapter(customGridAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
결과 :
가 어떻게 그것을 화면 크기와 해상도 독립적으로 할 수 있습니다! :(
편집 : 는 동적으로의 GridView의 너비를 변경하려고했으나 치명적인 예외가 발생했습니다 또한 내가이 시험
package com.example.test;
import java.util.ArrayList;
import android.R.dimen;
import android.R.integer;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Remove App TitleBar
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Get Screen Dimensions
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
final TextView txt = (TextView) findViewById(R.id.textView1);
txt.setText(Integer.toString(width)+" x "+Integer.toString(height));
Bitmap block = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon1);
Bitmap block2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon2);
Bitmap block3 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon3);
Bitmap block4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon4);
gridArray.add(new Item(block));
gridArray.add(new Item(block2));
gridArray.add(new Item(block3));
gridArray.add(new Item(block4));
gridView = (GridView) findViewById(R.id.gridView1);
//###### Change Height of cells #####//
LinearLayout rg = (LinearLayout) findViewById(R.layout.row_grid);
ViewGroup.LayoutParams rgparam = rg.getLayoutParams();
rgparam.height = rgparam.width;
rg.setLayoutParams(rgparam);
customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, gridArray);
gridView.setAdapter(customGridAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
!.
customGridAdapter = new CustomGridViewAdapter(this, rg.getId(), gridArray);
화면 해상도에 따라 셀의 너비와 높이를 어떻게 정의 할 수 있습니까? 줄 수와 격자의 Col 수를 수정했습니다 (9x6) – Jessica
캔버스/화면 높이와 너비를보고 적절히 나누었습니다. 그런 다음 Path 클래스를 사용하여 해당 치수를 기반으로 상자 모양을 만듭니다. 이미지와 동일한 배경색으로 상자를 채우고 각 상자 안에 이미지를 가운데에 배치 할 것입니다 (어떻게할지는 모르지만 다른 질문을 검색 할 때 질문을 보았습니다). 당신은 원래의 대답과는 다른 접근법 인이 일을하는 자신의 견해를 만들 것입니다. – Steven
화면 크기에 따라 동적으로 "row_grid"레이아웃의 크기를 조정하려했지만 런타임 오류가 발생하여 응용 프로그램이 종료되었습니다 !!! – Jessica