كيف يمكنني عموديا محاذاة أحد العناصر الموجودة في القائمة باستخدام تخطيط النسبي؟

StackOverflow https://stackoverflow.com/questions/2451744

سؤال

وأنا باستخدام طريقة عرض القائمة في الروبوت 1.5 لعرض قائمة من الصور والنصوص الموجودة بجانب الصورة. أحاول أن تركز عموديا النص ولكن النص هو في الجزء العلوي من الصف بدلا من الوسط. وفيما يلي تخطيط بلدي:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip">

    <ImageView android:id="@+id/item_image" android:layout_width="wrap_content" 
        android:layout_height="wrap_content"  android:paddingRight="10dip" 
        android:src="@drawable/default_image" android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"/>

    <TextView android:id="@+id/item_title" 
        android:layout_width="wrap_content" android:layout_height="wrap_content" 
        android:layout_toRightOf="@id/item_image" 
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        />

</RelativeLayout>

ويبدو غريبا أنني بحاجة لوضع alignParentTop = "صحيح" عندما أحاول أن تركز عموديا النص، ولكن إذا كنت لا النص حتى لا تظهر. ماذا أفعل الخطأ؟

هل كانت مفيدة؟

المحلول

وتحرير التالية التعليقات:

واتضح جعل هذا العمل مع RelativeLayout ليست سهلة. في الجزء السفلي من الجواب لقد تضمنت RelativeLayout التي تعطي تأثير يريد، ولكن فقط حتى يتم تضمينه في ListView. بعد ذلك، وقعت نفس المشاكل كما هو موضح في السؤال. تم إصلاح ذلك عن طريق استخدام بدلا LinearLayout (ق).

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:orientation="horizontal">

    <ImageView android:id="@+id/pickImageImage" 
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:background="@drawable/icon"
        android:scaleType="fitXY"
        android:layout_marginRight="10dp"/>

    <TextView android:id="@+id/pickImageText" 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:gravity="left|center_vertical"
        android:text="I'm the text"/>

</LinearLayout>

إذا كنت تريد أن يكون مربعي نص، يمكنك عش orientation="vertical" الثانية وLinearLayout بعد ImageView ومن ثم وضع مربعات النص في هناك.

وهذا يعمل، ولكن يجب أن أعترف أنني لا أعرف لماذا فعل RelativeLayouts لا. على سبيل المثال، وهذا بلوق وظيفة عن طريق رومان غي يقول على وجه التحديد أنه ينبغي للRelativeLayout. عندما حاولت ذلك، وأنا لم يحصل ذلك للعمل تماما. من المسلم به أن لم أفعل ذلك بالضبط كما كان يفعل، ولكن بلدي التغييرات فقط مع بعض سمات TextViews، والتي كان ينبغي أن الكثير من الفرق.


وهنا يكمن الجواب الأصلي:

وأعتقد أنك الخلط بين الروبوت مع كل تلك التعليمات متناقضة إلى حد ما في RelativeLayout. I إخراجها الشيء الخاص بك إلى هذا:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip">

    <ImageView android:id="@+id/item_image"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:paddingRight="10dip" 
        android:src="@drawable/icon"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"/>

    <TextView android:id="@+id/item_title" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@id/item_image" 
        android:layout_centerVertical="true"
        android:text="Blah!"/>

</RelativeLayout>

والذي يعمل بشكل جيد. أزلت الكثير من android:layout_alignParentxxx زائدة عن الحاجة الخاصة بك لأنها لم تكن ضرورية. هذا الرأي يأتي الآن مع الصورة في أعلى الزاوية اليسرى والنص تركزت رأسيا بجانبه. إذا كنت ترغب في الصورة تركزت عموديا كذلك، فإنك لا يمكن أن يكون RelativeLayout يكون على الروبوت: layout_height = "wrap_content" لأنه يحاول أن يجعل نفسه لا أطول من ارتفاع الصورة. كنت قد لتحديد ارتفاع، على سبيل المثال 80dp، ثم قم بتعيين ImageView إلى ارتفاع ثابت مثل 60dp مع الروبوت: scaleType = "fitXY" لجعله تقليص لتناسب بشكل صحيح

نصائح أخرى

وكان عالقا على مشكلة مشابهة لبعض الوقت، ولكن وجدت هذا من CommonsWare:

وقال "عندما كنت تضخيم التخطيط، واستخدام inflate(R.layout.whatever, parent, false)، حيث الأصل هو يكون ListView."

والأشغال ولكن فقط عند تعيين ارتفاع الصف إلى قيمة محددة (أي لا يمكنك استخدام wrap_content).

والأساس التوجيه سيفعل ذلك، ولكن ImageView ببساطة لا يدعم محاذاة خط الأساس اعتبارا من اليوم. يمكنك حل هذا من خلال خلق فئة فرعية من ImageView، تجاوز أسلوب getBaseline () ويعود ارتفاع الصورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top