2016-03-12 2 views
0

Итак, у меня есть базовое приложение, в котором список просматривает весь экран. Каждая строка представляет собой номер строки в тексте, за которой следуют две кнопки - и +, которые соответственно увеличивают или уменьшают число.Как уменьшить размер моего списка Android

Однако я хочу поэкспериментировать с калибровкой, поэтому я хотел в принципе «сжать» этот список до 1/4-го размера и заставить его работать в углу.

Однако я не смог даже сжать свой первоначальный список, потому что все, что я могу сделать, это fill_parent, match_parent, или wrap_content.

Что я могу сделать?

Мой файл activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<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.doublebass.mylistapp.MainActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@android:id/list" 
     android:layout_alignParentTop="true" 
     /> 
</RelativeLayout> 

Моя попытка с помощью GridLayout (положить мой реальный список в левом верхнем углу и четырех других местах просто пустой, так что я положил в пустой ListViews):

<?xml version="1.0" encoding="utf-8"?> 
<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.doublebass.mylistapp.MainActivity"> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:columnCount="2" 
     android:rowCount="2"> 

     <ListView 
      android:layout_gravity="fill" 
      android:id="@android:id/list" 
      android:layout_columnSpan="1" 
      android:layout_rowSpan="1"/> 
     <ListView 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" 
      android:layout_rowSpan="1"/> 
     <ListView 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" 
      android:layout_rowSpan="1"/> 
     <ListView 
      android:layout_gravity="fill" 
      android:layout_columnSpan="1" 
      android:layout_rowSpan="1"/> 

    </GridLayout> 
</RelativeLayout> 

ответ

0

Хорошо, что вам нужно сделать это программно. Вы упомянули, что в настоящее время listview занимает весь экран. Итак, давайте сначала получить ширину и высоту полного экрана:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
height = displaymetrics.heightPixels; 
width = displaymetrics.widthPixels; 

Теперь, когда именно вы хотите изменить размер ListView? Должен быть какой-то пользовательский ввод или триггер. В этот момент просто установите высоту и ширину как одну четвертую от высоты экрана. Вы сделали :)

ViewGroup.LayoutParams listParameters = listView.getLayoutParams(); 
listParameters.height = height/2; 
listParameters.width = width/2; 
list.setLayoutParams(list); 

PS:

Если вы хотите сохранить расширение/стягивания ListView, основанное на каком-то событии, вы просто должны держать глобальную логическую переменную, которая сохраняет текущее состояние , Переключайте его каждый раз, когда изменяется состояние.

Как это сделать с помощью XML только

Идея заключается в том, чтобы использовать layout_weight атрибут LinearLayout:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="2"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     android:weightSum="2"> 

     <ListView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:id="@android:id/list" 
      android:layout_weight="1" 
      android:layout_alignParentTop="true" 
      /> 

    </LinearLayout> 
</LinearLayout> 
+0

это возможно только программным способом? Сейчас я экспериментирую с GridLayout, но он не работает. Я обновлю OP. – DoubleBass

+0

Да, если вы хотите динамически расширять/заключать контракты. Но, если вы просто хотите постоянно иметь фиксированную высоту и ширину, почему бы не указать требуемую высоту/ширину в xml? Или, может быть, у меня не возникла проблема. –

+0

Я не знаю, как это сделать. Я просто пытаюсь сжать список в 1/4-й экран (так что половина его длины, половина его ширины) – DoubleBass

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