2

Я создаю галерею о некоторых местах. Мое приложение содержит ScrollView с примерно 20 кнопками изображения разных мест, и если пользователь нажимает на любое место, они будут перенесены на другой экран с информацией о месте.Работа с ScrollView в android

До сих пор я мог завершить свое приложение, единственная проблема, с которой я столкнулся, заключается в том, что кнопки изображения мест расположены один за другим, но я действительно хочу, чтобы они были рядом друг с другом, если есть комната , Например, в настоящее время мое приложение выглядит так:

enter image description here

Существует много места впустую на экране слева и справа, если это возможно, я хочу сделать макет моего приложения что-то вроде этого;

enter image description here

и в режиме landspace, я хочу иметь что-то вроде этого. enter image description here

также, если возможно, в зависимости от размера экрана телефона, я хочу, чтобы в текущем виде было больше изображений. например скажем, к примеру, если приложение открыто в 10" таблетки, а затем, а затем с 2 imagebuttons на той же линии, я хочу иметь больше

Мой код XML является;.

 <ImageButton 
      android:id="@+id/london" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/london" 
      android:src="@drawable/london" /> 

     <ImageButton 
      android:id="@+id/paris" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/paris" 
      android:src="@drawable/paris" /> 

.... 


     <ImageButton 
      android:id="@+id/berlin" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/berlin" 
      android:src="@drawable/berlin" /> 

Спасибо за ваш помогите, если я не объяснил себя четко, пожалуйста, дайте мне знать, и я постараюсь изо всех сил объяснить это лучше.

ответ

0

Это звучит как прецедент для GridView. Хорошей новостью является то, что вы, вероятно, можете повторно использовать свой адаптер и только необходимо заменить ListView на GridView. Вот ссылка на documentation

--EDIT--

Если вы хотите заменить ScrollView, вы должны изменить свой подход.

В файле XML вы можете заменить все ImageButtons с одним GridView:

<GridView 
    android:id="@+id/gvCities" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</GridView> 

вы должны иметь новый файл макета называется city_button:

<ImageButton xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="200dp" 
    android:contentDescription="@string/content_discription" 
    android:layout_height="wrap_content" > 

</ImageButton> 

Вы должны создать новый класс: CityAdapter

import android.content.res.Resources; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageButton; 

import com.znappie.activities.R; 

public class CityAdapter extends BaseAdapter { 
    private int[] imageIds; 
    private LayoutInflater inflate; 
    private Resources resources; 

    public CityAdapter(int[] imageIds, LayoutInflater inflate, 
      Resources resources) { 
     this.imageIds = imageIds; 
     this.inflate = inflate; 
     this.resources = resources; 
    } 

    @Override 
    public int getCount() { 
     return imageIds.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return imageIds[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflate.inflate(R.layout.city_button, parent); 
     } 
     ((ImageButton) convertView).setImageDrawable(resources 
       .getDrawable(imageIds[position])); 
     return convertView; 
    } 

} 

Вы можете то используйте это у вас Основная деятельность:

int[] ids = {R.drawable.berlin, R.drawable.london, ...}; 
      GridView cities = (GridView) findViewById(R.id.gvCities); 
      cities.setAdapter(new CityAdapter(ids, getLayoutInflater(), getResources())); 
+0

Я довольно новичок в java, поэтому, пожалуйста, со мной. В настоящее время я использую . Должен ли я разместить ScrollView с GridView? вроде этого Henry

+0

Я думал, вы сказали, что вы использовали 'ListView'. Вы не можете просто заменить 'ScrollView' на' ListView'. Я отредактирую свой ответ – TmKVU

+0

Извините, я запутался, я использовал ScrollView. – Henry