2012-08-12 1 views
0

내 첫 번째 안드로이드 응용 프로그램을 쓰고 있습니다. 안드로이드 2.3.3 SDK를 사용하고 있습니다. 게임은 화면에 4x4 격자의 카드가있는 종류의 카드 게임입니다.화면 전체에 DataGrid를 펼치면 항목이 모두 표시됩니다.

게임이 시작될 때 화면에 표시되는 것은 데이터 그리드 (메뉴가 없거나 아무것도 표시되지 않음)뿐입니다.

그래서 GameActivity 레이아웃은 다음

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/faces_grid_view" 
    android:numColumns="4" 
    android:verticalSpacing="1dp" 
    android:horizontalSpacing="1dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
> 
</GridView> 

이는 GameActivity 클래스의에서 onCreate 함수의 관련 코드입니다 :하지 OnCreate

  Display display = getWindowManager().getDefaultDisplay(); 
      final int width = display.getWidth(); 
      final int height = display.getHeight(); 

      final int bottomPadding=150; 
      //Display display = getWindowManager().getDefaultDisplay(); 
      gameTurns = new ArrayList<GameTurn>(); 
      imageWidth=width/4; 
      imageHeight=(height-bottomPadding)/4; 
      imageAdapter = new ImageAdapter(this,imageWidth,imageHeight); 
      facesGridView = (GridView) findViewById(R.id.faces_grid_view); 
      facesGridView.setAdapter(imageAdapter); 

() 코드를 내가지고있어 defaultDisplaySize를 4로 나눈 값이므로 이미지의 최대 높이와 ​​너비를 알 수 있습니다.

  • 나는 bottomPadding을 추가해야합니다. 나는 갤럭시 노트와 갤럭시 탭 10.1에서 체크했고, 아마도 getDefaultDisplay는 태블릿 자체의 하단 툴바의 공간을 반환하므로 그림이 패딩없이 모든 스크린에 겹쳐진다.

제가 알기로 저는 GridView 용 어댑터를 설정했습니다. 어댑터는 BaseAdapter 을 확장하고 이전에 계산 한 너비와 높이를 생성자에 붙여 넣습니다.

어댑터의의 getView 기능이 포함 된 다음

 public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView; 
      if (convertView == null) { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       LayoutParams param = new LinearLayout.LayoutParams(this.imageWidth,this.imageHeight); 
       imageView.setLayoutParams(new GridView.LayoutParams(param)); 
       imageView.setAdjustViewBounds(true); 
       imageView.setScaleType(ScaleType.CENTER_INSIDE); 
       imageView.setPadding(1,1,1,1); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

그래서 몇 가지 질문 :

  1. 그냥 모든 화면에서 볼 수 있도록 데이터 그리드를 구성하는 방법이 있고 이미지 너비 또는 높이를 구성하지 않고 스크롤하지 않고 모든 항목을 표시 하시겠습니까? 왜 그렇게 간단한 작업을 위해 열심히 일해야합니까?
  2. 직접 물건을 계산해야하는 경우 실제 활동 높이와 너비를 가져 오는 방법이 있습니까? 그래서 어떤 덧 덧치도 추가하지 않아도됩니까? welp 나는 풍경과 초상화의 모든 scree 크기에서 작업하기를 원한다.

며칠 동안 구성을 변경하고 사용하는 것이 지겹았습니다. 지금까지 내가 달성 한 최선의 방법이므로이 문제에 관한 모든 정보를 크게 높이 평가할 수 있습니다. 중심 수직 확산 이미지 4에

업데이트

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:stretchColumns="*" 
    android:weightSum="4" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView8" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
    <TableRow 
    android:id="@+id/tableRow3" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView9" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView10" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView11" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView12" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
    <TableRow 
    android:id="@+id/tableRow4" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView13" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView14" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView15" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView16" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 

</TableLayout> 

XML 파일이 결과 (더 아래에있을 수 있도록 이것이 모든 화면에 맞는).

screenshot http://i49.tinypic.com/qn3d6t.png.

나는 무엇을 놓쳤는가? :)

감사합니다!

Kfir

답변

1

은 모든 화면에 볼 수 있도록 및 구성 이미지 너비 또는 높이없이 스크롤없이 모든 항목을 표시하는 데이터 그리드를 구성하는 방법은 무엇입니까? 간단한 작업 인 을 위해 열심히 노력해야하는 이유는 무엇입니까?

잘못된 위젯 만 사용하는 것은 간단한 작업입니다. 일반적으로 GridView을 사용하면 셀 격자가 화면보다 커서 GridView의 재활용 메커니즘 (성능 개선 및 앱 메모리 문제가 발생하지 않음)의 이점을 누릴 수 있습니다. 모든 세포를 볼 수 있기를 원하는 경우에는 이것이 아닙니다.

는 I 네 TableRows (1 (및 4weighSum 세트로 설정 layout_weight에 포함될 것이다 (동일한 폭을 갖 stretchColumns 세트 * 너무 로우 열과) FILL_PARENT 설정된 폭과 높이 TableLayout 사용할 것 부모 TableLayout)이 동일 높이가되도록) TableRowlayout_height0dp으로 설정됩니다. TableRow에는 각각 ImageViews이 포함됩니다.

나 자신을 물건을 계산해야하는 경우, 내가 어떤 패딩을 추가 할 필요가 없습니다 있도록 실제 활동의 높이와 너비를 얻을 수있는 방법이 있나요? 프리 스케이프 및 인물화의 모든 크기로 작업하고 싶습니다.

위 게시 솔루션을 사용하는 것이 좋습니다. 여전히 GridView을 사용하고자하는 경우 '(당신이 layout_width/height에 대한처럼 wrap_contentfill_parent을 사용하여이 아닌)이 모든 너비/높이를 채울 수 있도록하고 onCreate 방법에 Runnable이있는 당신이 GridView를 검색 Handlerpost에 사용 s LayoutParams을 사용하여 어댑터를 설정하십시오.

+0

놀라운 것! 지금 해보고 나중에 알게. 덕분에 – ufk

+0

감사합니다. 나는 여전히 기대되는 결과를 얻지 못한다. 나는 여기에 새로운 XML 파일을 게시했다. 덕분에 지금까지 :) – ufk

+0

ohh .. 또한 weightSum = 4 각 tableRow 및 layout_weight = 1 각 이미지를 추가했습니다. 이제는 효과가있는 것처럼 보입니다. 테스트. – ufk

관련 문제