Проблема с позиционированием в Android - PullRequest
0 голосов
/ 19 февраля 2012

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

Вот мой текущий результат (1-й ряд), а 2-й ряд - мое уродливое издание MsPaint - о том, как бы я этого хотел. Текст, который обрезается, если он достигает значка увеличительного стекла, с двумя другими значками после него.

Current and wanted state

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

[Редактировать] Обновление и обобщенная проблема: Я немного озадачен, но я думаю, что моя настоящая проблема заключается в том, что текстовое представление не знает заранее, что я буду помещать больше значков справа от лупы. Это означает, что он не «резервирует» пространство для этих значков, а просто занимает все доступное пространство и оставляет только часть для значка увеличения. [/ Edit]

У меня есть 3 XML-файла, которые содержат мой макет. Вот мой первый файл, это просто макет, с которого я запускаю экран:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/LayoutWrap">

    <ListView
        android:id="@+id/my_listview"
        style="@style/List"/>
</LinearLayout>

'xml-файл' 'my_listview' (я знаю, что это глупое имя:)):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 style="@style/myListItem"
 android:id="@+id/list">


    <TextView
    android:id="@+id/my_item_title"
    style="@style/myItemName"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/my_item_detail"
    android:text="Name" />



    <ImageView
        android:id="@id/my_item_detail"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_detail_unselected"
        android:contentDescription="Detail"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/my_item_delete"
    />


    <ImageView
        android:id="@id/my_item_delete"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_delete_unselected"
        android:text="Delete my"
        android:layout_alignParentTop="true"
    />

        <ImageView
        android:id="@+id/my_item_copy"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_update_unselected"
        android:text="Copy my"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/my_item_delete"
    />

</RelativeLayout>

В моем 'styles.xml' определены стили, которые не имеют специальных свойств. Я думаю, что единственная интересная вещь заключается в том, что я стилизовал текст, имеющий определенный textSize (возможно, лучше? Android: LargeAppearance или около того), и что я поместил его в одну строку.

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <style name="WrapBoth">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <style name="WrapHeight">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

        <style name="LayoutWrap">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>   
        <item name="android:orientation">vertical</item>        
    </style>

            <style name="List" parent="style/WrapHeight"/>

    <style name="myListItem">
        <item name="android:padding">5dp</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">?android:attr/listPreferredItemHeight</item>
    </style>

    <style name="myItemName" parent="style/WrapBoth">
        <item name="android:textSize">11sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:ellipsize">end</item>
        <item name="android:lines">1</item>
        <item name="android:scrollHorizontally">true</item>
    </style>

    <style name="myImageItem" parent="style/WrapBoth">

    </style>
</resources>

Я уже благодарен за любую помощь заранее! Тем временем я поработаю над своими «buttonListeners», я не ожидаю, что они будут большой проблемой:)

1 Ответ

2 голосов
/ 05 марта 2012

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

Чтобы решить эту проблему, я создал относительный макет, в котором было 3 изображения, и расположил изображения так, как янравится им быть.Я дал своему относительному расположению следующие свойства:

<RelativeLayout
        android:id="@id/options"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
         >

И текстовое представление, которое я хотел оставить слева, я дал ему следующие свойства:

<TextView
    android:id="@+id/item_title"
    style="@style/ItemName"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:text="@string/dummy_title" 
    android:layout_toLeftOf="@+id/options"/>

Стили, которые я использовал, ясохранил те же.Используя этот способ, макет знает, какое место должно быть зарезервировано для 3 изображений.

Это все немного похоже на математику, сначала в скобках идет сначала, а в андроиде в макетах идет первым:).

...