2014-11-16 3 views
1

Я хочу, чтобы мой GridView отображал только 16 случайных букв, 4x4 плитки, и, если возможно, я не хочу пробела между буквами. Я также хочу, чтобы он отобразил соответствующий текст в TextView, чтобы сформировать слово. Сейчас я поставил его в тост, чтобы показать, как это должно быть. Но он отображает только соответствующую букву изображения. Как я могу это достичь? Я не знаю, как это сделать. Любая помощь будет оценена по достоинству.Манипулирование GridView

Новое в Android Программирование

enter image description here enter image description here

grid_row.xml

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:orientation="vertical" 
 
    android:padding="5dp" > 
 
    
 
    <ImageView 
 
     android:id="@+id/imageView" 
 
     android:layout_width="50dp" 
 
     android:layout_height="50dp" 
 
     android:layout_marginRight="1dp" 
 
     android:layout_marginEnd="1dp" 
 
     android:contentDescription="@string/hello_world" 
 
     android:src="@drawable/ic_launcher" > 
 
     </ImageView> 
 

 
    <TextView 
 
     android:id="@+id/textView" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:layout_marginTop="2dp" 
 
     android:textSize="15sp" 
 
     android:visibility="gone" > 
 
     </TextView> 
 

 
</LinearLayout>

activity_main.xml

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" 
 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
 
    android:paddingRight="@dimen/activity_horizontal_margin" 
 
    android:paddingTop="@dimen/activity_vertical_margin" 
 
    tools:context="com.grid.gridgame.MainActivity" > 
 
    
 
    <TextView 
 
     android:id="@+id/wordHere" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:text="1234567890"/> 
 

 
    <GridView 
 
     android:id="@+id/gridViewCustom" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:layout_margin="1dp" 
 
     android:columnWidth="80dp" 
 
     android:gravity="center" 
 
     android:horizontalSpacing="0dp" 
 
     android:numColumns="4" 
 
     android:stretchMode="columnWidth" 
 
     android:verticalSpacing="0dp" /> 
 

 
</RelativeLayout>

MainActivity.java

package com.grid.gridgame; 
 

 
import android.app.Activity; 
 
import android.os.Bundle; 
 
import android.view.Menu; 
 
import android.view.MenuItem; 
 
import android.view.View; 
 
import android.widget.AdapterView; 
 
import android.widget.AdapterView.OnItemClickListener; 
 
import android.widget.GridView; 
 
import android.widget.ImageView; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 

 

 
public class MainActivity extends Activity { 
 
\t 
 
\t GridView gridView; 
 
\t String word; 
 
\t int rando; 
 
\t static final String[] setOne = new String[] { 
 
\t \t "A", "M","C", "Qu", 
 
\t \t "Z", "B", "D", "A", 
 
\t \t "E", "I", "E", "L", 
 
\t \t "M", "N", "T", "P" }; 
 
\t 
 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     
 
     gridView = (GridView) findViewById(R.id.gridViewCustom); 
 
     
 
     gridView.setAdapter(new GridViewCustomAdapter(this, setOne)); 
 
     
 
\t \t gridView.setOnItemClickListener(new OnItemClickListener() { 
 
\t \t \t public void onItemClick(AdapterView<?> parent, View v, 
 
\t \t \t \t \t int position, long id) { 
 
\t \t \t \t 
 
\t \t \t \t Toast.makeText(
 
\t \t \t \t getApplicationContext(), 
 
\t \t \t \t ((TextView) v.findViewById(R.id.textView)) 
 
\t \t \t \t .getText(), Toast.LENGTH_SHORT).show(); 
 
    
 
\t \t \t } 
 
\t \t }); 
 
     
 
     
 
    } 
 

 

 
    @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; 
 
    } 
 

 
    @Override 
 
    public boolean onOptionsItemSelected(MenuItem item) { 
 
     // Handle action bar item clicks here. The action bar will 
 
     // automatically handle clicks on the Home/Up button, so long 
 
     // as you specify a parent activity in AndroidManifest.xml. 
 
     int id = item.getItemId(); 
 
     if (id == R.id.action_settings) { 
 
      return true; 
 
     } 
 
     return super.onOptionsItemSelected(item); 
 
    } 
 
}

GridViewCustomAdapter

package com.grid.gridgame; 
 

 
import android.content.Context; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.BaseAdapter; 
 
import android.widget.ImageView; 
 
import android.widget.TextView; 
 

 

 

 
public class GridViewCustomAdapter extends BaseAdapter { 
 
\t private Context context; 
 
\t private final String[] setOne; 
 
    
 
\t public GridViewCustomAdapter(Context context, String[] setOne) { 
 
\t \t this.context = context; 
 
\t \t this.setOne = setOne; 
 
\t } 
 
    
 
\t public View getView(int position, View convertView, ViewGroup parent) { 
 
    
 
\t \t LayoutInflater inflater = (LayoutInflater) context 
 
\t \t \t .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
    
 
\t \t View gridView; 
 
    
 
\t \t if (convertView == null) { 
 
\t \t \t convertView = new ImageView(context); 
 
\t \t \t gridView = new View(context); 
 
    
 
\t \t \t // get layout from mobile.xml 
 
\t \t \t gridView = inflater.inflate(R.layout.grid_row, null); 
 
    
 
\t \t \t // set value into TextView 
 
\t \t \t TextView textView = (TextView) gridView 
 
\t \t \t \t \t .findViewById(R.id.textView); 
 
\t \t \t 
 
\t \t \t textView.setText(setOne[position]); 
 
    
 
\t \t \t // set image based on selected text 
 
\t \t \t ImageView imageView = (ImageView) gridView 
 
\t \t \t \t \t .findViewById(R.id.imageView); 
 
\t \t \t imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
 
\t   imageView.setPadding(0, 0, 0, 0); 
 
    
 
\t \t \t String allletters = setOne[position]; 
 
\t \t \t 
 
\t \t \t if (allletters.equals("A")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.a); 
 
\t \t \t } else if (allletters.equals("M")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.m); 
 
\t \t \t } else if (allletters.equals("C")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.c); 
 
\t \t \t } else if (allletters.equals("Qu")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.qu); 
 
\t \t \t \t 
 
\t \t \t } else if (allletters.equals("Z")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.z); 
 
\t \t \t } else if (allletters.equals("B")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.b); 
 
\t \t \t } else if (allletters.equals("D")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.d); 
 
\t \t \t } else if (allletters.equals("A")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.a); 
 
\t \t \t \t 
 
\t \t \t } else if (allletters.equals("E")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.e); 
 
\t \t \t } else if (allletters.equals("I")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.i); 
 
\t \t \t } else if (allletters.equals("E")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.e); 
 
\t \t \t } else if (allletters.equals("M")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.m); 
 
\t \t \t \t 
 

 
\t \t \t } else if (allletters.equals("M")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.m); 
 
\t \t \t } else if (allletters.equals("N")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.n); 
 
\t \t \t } else if (allletters.equals("T")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.t); 
 
\t \t \t } else if (allletters.equals("P")) { 
 
\t \t \t \t imageView.setImageResource(R.drawable.p); 
 
\t \t \t } 
 

 
\t \t } else { 
 
\t \t \t gridView = (View) convertView; 
 
\t \t \t 
 
\t \t } 
 
    
 
\t \t return gridView; 
 
\t } 
 
    
 
\t @Override 
 
\t public int getCount() { 
 
\t \t return setOne.length; 
 
\t } 
 
    
 
\t @Override 
 
\t public Object getItem(int position) { 
 
\t \t return null; 
 
\t } 
 
    
 
\t @Override 
 
\t public long getItemId(int position) { 
 
\t \t return 0; 
 
\t } 
 

 
}

+0

Просим полностью заполнить мероприятие_main.xml. В нем будет какое-то определение макета. Полный файл, пожалуйста. Этот файл определяет видимость этого TextView. – greenapps

+0

Пожалуйста, добавьте 'toroid: text =" 12345678 "к этому TextView, чтобы увидеть, станет ли он видимым. И удалите эту видимость! – greenapps

+0

Просто установите только первые 16 букв в MOBILE_OS. В противном случае ваш GridView станет большим. – greenapps

ответ

0

Если вы хотите сохранить письмо, которое вы можете просто создать строку и сохранить букву нажим пользователем.

Example code: 
String word; // word that you want to be display 

String letter = MOBILE_OS[id];  // get the corresponding letter from array from the user selected 

word.add(letter); 
+0

где я должен положить этот код @ user3806339 –

+0

Поместите его в gridView.setOnItemClickListener. Как только пользователь нажал клавишу на экране, вы можете получить соответствующую букву, а затем сохранить ее в строке слова – user3806339

+0

, это приведет к ошибке в word.add (letter); -> метод add (string []) определяется для типа строки @ user3806339 –

Смежные вопросы