Android'de Yatay ListView?


215

ListViewYatay yapmak mümkün mü ? Bunu galeri görünümü kullanarak yaptım, ancak seçilen öğe otomatik olarak ekranın ortasına geliyor. Seçilen öğeyi tıkladığım noktada istemiyorum. Bu sorunu nasıl düzeltebilirim? Benim fikrim ListViewyatay kaydırma ile ayarlamak oldu . Fikrinizi mi paylaşıyorsunuz?


1
kullanmak bu Seni yardımcı olacağını umuyoruz Yatay ListView oluşturmak için Yazımın linki.
FAIZ ANWAR

2
Bahsettiğiniz blog @Indra kaldırıldı
Animesh Mangla

Bu örneği kontrol edebilirsiniz thedeveloperworldisyours.com/android/…
Cabezas

Yanıtlar:


123

Android Dokümantasyonuna göre RecyclerView, öğeleri liste görünümünde düzenlemenin ve yatay olarak görüntülenmenin yeni yolu

Avantajları:

  1. Recyclerview Adapter kullanılarak ViewHolder şablonu otomatik olarak uygulanır
  2. Animasyonu gerçekleştirmek kolaydır
  3. Daha birçok özellik

Hakkında daha fazla bilgi RecyclerView:

  1. grokkingandroid.com
  2. antonioleiva.com

Örneklem:

survivingwithandroid.com

Yataydan ListViewdikeye yapmak için aşağıdaki bloğu eklemeniz yeterlidir

Kod-pasajı

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);

1
LayoutManager ile ilgili sorunlar google tarafından giderilirse bu en iyi çözüm olacaktır. code.google.com/p/android/issues/detail?id=74772
Ponsuyambu Velladurai

basit bir geri dönüşüm görünümü oluşturmak için bu örneği kullanın: android-examples.com/…
Matcoil

1
Tamam, widget'lar için ne yolu var?
Vladislav

ListView veya GridView gibi bağdaştırıcı destekli diğer görünümlerin aksine RecyclerView, istemci kodunun alt görünümler için özel düzen düzenlemeleri sağlamasına izin verir. Bu düzenlemeler RecyclerView.LayoutManager tarafından kontrol edilir. RecyclerView işlevinin çalışması için bir LayoutManager sağlanmalıdır.
Yohanes AI

RecyclerView hala ListView kadar iyi ve kolay öğeleri (RecyclerView.Selection sınıf bahsetmiyorum) tıklama işleyemez - bu RecyclerView bu soru için en iyi cevap olmadığını düşünüyorum birkaç nedeni biridir.
Edward Quixote

60

Paul, kütüphanesinin hatalarını düzeltmeye veya kullanıcıların düzeltmelerini kabul etmeye zahmet etmiyor. Bu yüzden benzer işlevselliğe sahip başka bir kütüphane öneriyorum:

https://github.com/sephiroth74/HorizontalVariableListView

Güncelleme : 24 Temmuz 2013 tarihinde yazar (sephiroth74) android 4.2.2 ListView koduna göre tamamen yeniden yazılmış versiyonu yayınladı. Önceki sürümde bulunan ve harika çalışan tüm hatalara sahip olmadığını söylemeliyim!


2
Bu kabul edilmiş bir cevap olmalı, çünkü bu HorizontalVariableListView Paul'ün yanıtından çok daha gelişmiş. Örneğin, bir listedeki konumu seçmek için uygun bir yöntemi vardır, Paul'ün yerine "TODO: bir gün uygulamak" vardır.
Yan.Yurkin

5
Bu çözümün android 2.3 veya üzeri bir
sürüm

1
sephiroth74's HorizontalVariableListView tam olarak olmasını umduğunuz şeydir: ListView bir kopyasını android kaynak kodundan dikey olarak değil yatay olarak hareket edecek şekilde güncellenen tüm yöntemlerle. Henüz herhangi bir sorunla karşılaşmadım. Beni oraya yönlendirdiğiniz için çok teşekkür ederim Malachiasz!
SilithCrowe

liste görünümünde iyi wrap_content bu lib'de hala desteklenmiyor
Kalpesh Lakhani

1
Artık kullanımdan kaldırıldı
Animesh Mangla

28

@Paul cevap harika bir çözüme bağlanır, ancak kod öğelerdeki çocuklarda onClickListeners kullanılmasına izin vermez (geri arama işlevleri hiçbir zaman çağrılmaz). Bir süredir çözüm bulmak için uğraşıyorum ve burada bu kodda ne yapmanız gerektiğini göndermeye karar verdim (birisinin ihtiyacı olması durumunda).

Geçersiz dispatchTouchEventkılmak yerine geçersiz kılma onTouchEvent. Aynı kodu kullanın ve dispatchTouchEventyöntemi silin (ikisi arasındaki farkı buradan okuyabilirsiniz http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean handled = mGesture.onTouchEvent(event);
    return handled;
}

Ardından, olayı çocuklardan öğeyi çalmaya karar verecek ve bunu bizim tarafımıza verecek onTouchEventveya onlar tarafından işlenmesine izin verecek aşağıdaki kodu ekleyin .

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch( ev.getActionMasked() ){
        case MotionEvent.ACTION_DOWN:
             mInitialX = ev.getX();
             mInitialY = ev.getY();             
             return false;
        case MotionEvent.ACTION_MOVE:
             float deltaX = Math.abs(ev.getX() - mInitialX);
             float deltaY = Math.abs(ev.getY() - mInitialY);
             return ( deltaX > 5 || deltaY > 5 );
        default:
             return super.onInterceptTouchEvent(ev);
    }
}

Son olarak, sınıfınızdaki değişkenleri bildirmeyi unutmayın:

private float mInitialX;
private float mInitialY;

13
Bunu neden Paul'e çekme isteği olarak göndermiyorsun?
Cristian

ev.getActionMasked () android 2.1 platformunda kullanılamıyor. Bunun üstesinden nasıl geleceğinizi biliyor musunuz?
Eugene Popovich

Ben ev.getMaskedAction () eşit olacak sho maskedAction = ev.getAction () & MotionEvent.ACTION_MASK kullanabilirsiniz gibi görünüyor
Eugene Popovich

Gerçekten faydalı! ama onTouchEvent içine kod değiştirme Garip bir mahsup var. Ben dispatchTouchEvent içine tuttu ve mükemmel çalışıyor! Thanks
jbc25

jbc25 Bu düzeltmeyi kullanmak için garip atlamalar olduğunu teyit edebilir
Eugene Popovich

23

Google, Android Destek Kitaplığı v7 21.0.0'ı tanıttığından, öğeleri yatay olarak kaydırmak için RecyclerView'ü kullanabilirsiniz. RecyclerView widget'ı, ListView'in daha gelişmiş ve esnek bir sürümüdür.

RecyclerView kullanmak için bağımlılık eklemeniz yeterlidir:

com.android.support:recyclerview-v7:23.0.1

İşte bir örnek:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);

        MyAdapter adapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(adapter);
    }
}

RecyclerView hakkında daha fazla bilgi:


21

Bu biraz (çok) geç, ama birisinin daha sonra gelmesi durumunda bunu gönderiyorum.

Android L önizlemesi itibariyle Destek Kitaplığı'nda RecyclerViewtam olarak istediğinizi yapan bir kitaplık vardır .

Şu anda, yalnızca L önizleme SDK üzerinden alabilirsiniz ve size ayarlamanız gerekir minSdkTo L. Ancak gerekli tüm dosyaları projenize kopyalayabilir ve L resmi dışarı çıkana kadar bu şekilde kullanabilirsiniz.

Önizleme belgelerini buradan indirebilirsiniz .

Uyarı: Recycler View için API değişebilir ve hataları olabilir.

Güncellenmiş

Yatay liste görünümü için kaynak kodu:

LinearLayoutManager layoutManager
    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);

RecyclerView myList = findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);

Merhaba, işe yarıyor mu? çünkü deniyorum ve yatay bir RecyclerView yapamıyorum. Biraz kod koyabilir misin? teşekkürler
Cocorico

Sadece ayarlayın LinearLayoutManager- buraya bakın: stackoverflow.com/questions/28460300/…
Stéphane

19

Jar dosyasını buradan indirin

şimdi libs klasörünüze koyun, sağ tıklayın ve 'Kitaplık olarak ekle'yi seçin

Şimdi main.xml dosyasında bu kodu girin

 <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/hlistview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

Şimdi Yatay Sınıf Görünümü ile görüntü istiyorsanız, bu kodu koyun

  HorizontalListView hListView = (HorizontalListView) findViewById(R.id.hlistview);
    hListView.setAdapter(new HAdapter(this));


 private class HAdapter extends BaseAdapter {

    LayoutInflater inflater;

    public HAdapter(Context context) {
        inflater = LayoutInflater.from(context);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Const.template.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listinflate, null);
            holder = new HViewHolder();
            convertView.setTag(holder);

        } else {
            holder = (HViewHolder) convertView.getTag();
        }
        holder.img = (ImageView) convertView.findViewById(R.id.image);
        holder.img.setImageResource(Const.template[position]);
        return convertView;
    }

}

class HViewHolder {
    ImageView img;
}

herhangi bir seçiciyi veya herhangi bir özel seçiciyi desteklemiyor mu? Herhangi bir fikir?
Nitin Misra

Resimler yerine sayı dizisi ekleyebilir miyim?
souravlahoti

@BeingSrv evet Şunları yapabilirsiniz
Siddhpura Amit

Kütüphaneler klasörüne koyduktan sonra, sağ tıklayın ve 'Kütüphane olarak ekle'yi tıklayın
M. Usman Khan

nabız gibi yatay liste görünümü geliştirici listesi nasıl, bbcnews lütfen bana yardım
Harsha

13

Aslında çok basit : basitçe yan tarafa uzanmak için liste görünümünü döndürün

mlistView.setRotation(-90);

Daha sonra, çocukları şişirdikten sonra, getView yönteminin içinde olması gerekir. dik durmak için çocukları döndürürsünüz:

 mylistViewchild.setRotation(90);

Düzenleme: ListView dönme sonra düzgün uymuyorsa , ListView bu RotateLayout içine şöyle yerleştirin :

 <com.github.rongi.rotate_layout.layout.RotateLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:angle="90"> <!-- Specify rotate angle here -->

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent">
    </ListView>
</com.github.rongi.rotate_layout.layout.RotateLayout>

1
Denedim - o kadar basit değil. Döndürülmüş görüntüyü ekran genişliği ve yüksekliğine sığdırmayı başaramadım. Ve bu API yalnızca yeni cihazlarda kullanılabilir.
Malachiasz

Döndürmeden önce, listViews genişliğini ekran yüksekliğine ayarlayın ve liste görünümlerinin yüksekliğini ekran genişliğine ayarlayın. .
kc ochibili

1
ne dediğini denedin mi Ben var ve hiçbiri işe yaramıyor.
Malachiasz

döndükten sonra değerleri değiştirmeyi denedin mi? neden çalışmaması gerektiğini anlamıyorum. (döndürdükten sonra önceki yükseklik ve genişlik değerlerini nasıl bileceğinizi merak ediyorsanız, döndürmeden önce bunları bir değişkene kaydedebilir ve sonra döndürdükten sonra uygulayabilirsiniz.
kc ochibili

Bu kütüphanenin yeni sürümü ( stackoverflow.com/a/16589629/2075875 ) işi gerektiği gibi yapıyor ve android 2.3'ten çalışıyorken setRotation () 3.0'dan beri mevcut olduğu için tekrar döndürmek istemiyorum, ancak teşvik ediyorum kendiniz denemek ve çalışma kodunu sunmak.
Malachiasz

9

Benim çözümüm sadece ViewPagerwidget kullanmak . Merkez kilitli değildir Galleryve geri dönüşüm görünümleri için yerleşik özelliklere sahiptir ListView. Yatay olarak kaydırılabilir listelerle her uğraştığınızda Google Play uygulamasında benzer bir yaklaşım görebilirsiniz.

PagerAdapterOrada birkaç ince ayar yapmanız ve yapmanız yeterli :

public class MyPagerAdapter extends PagerAdapter {

    private Context mContext;

    public MyPagerAdapter(Context context) {
        this.mContext = context;
    }

    // As per docs, you may use views as key objects directly 
    // if they aren't too complex
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.item, null);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    // Important: page takes all available width by default,
    // so let's override this method to fit 5 pages within single screen
    @Override
    public float getPageWidth(int position) {
        return 0.2f;
    }
}

Sonuç olarak, aşağıdaki gibi adaptörle yatay olarak kaydırılabilir widget'ınız olacak: resim açıklamasını buraya girin


3
ListView gibi kaydırılabilir, ancak yatay yönde. Gördüğüm tek fark: öğeler tek tek kaydırılıyor, bu nedenle bir sonraki öğenin ortasına kaydırmak mümkün değil. Ancak ViewPager böyle çalışır.
fraggjkee

8

Not: Android artık RecyclerView kullanarak yatay liste görünümlerini desteklemektedir, bu yüzden şimdi RecyclerView hakkında bilgi için bu cevap kullanımdan kaldırılmıştır: https://developer.android.com/reference/android/support/v7/widget/RecyclerView

Herhangi bir harici yatay scrollview kütüphanesi kullanmadan bunu yapmak için bir mantık geliştirdim, burada elde ettiğim yatay görünüm ve cevabımı buraya gönderdim: https://stackoverflow.com/a/33301582/5479863

Benim json yanıtı şudur:

{"searchInfo":{"status":"1","message":"Success","clist":[{"id":"1de57434-795e-49ac-0ca3-5614dacecbd4","name":"Theater","image_url":"http://52.25.198.71/miisecretory/category_images/movie.png"},{"id":"62fe1c92-2192-2ebb-7e92-5614dacad69b","name":"CNG","image_url":"http://52.25.198.71/miisecretory/category_images/cng.png"},{"id":"8060094c-df4f-5290-7983-5614dad31677","name":"Wine-shop","image_url":"http://52.25.198.71/miisecretory/category_images/beer.png"},{"id":"888a90c4-a6b0-c2e2-6b3c-561788e973f6","name":"Chemist","image_url":"http://52.25.198.71/miisecretory/category_images/chemist.png"},{"id":"a39b4ec1-943f-b800-a671-561789a57871","name":"Food","image_url":"http://52.25.198.71/miisecretory/category_images/food.png"},{"id":"c644cc53-2fce-8cbe-0715-5614da9c765f","name":"College","image_url":"http://52.25.198.71/miisecretory/category_images/college.png"},{"id":"c71e8757-072b-1bf4-5b25-5614d980ef15","name":"Hospital","image_url":"http://52.25.198.71/miisecretory/category_images/hospital.png"},{"id":"db835491-d1d2-5467-a1a1-5614d9963c94","name":"Petrol-Pumps","image_url":"http://52.25.198.71/miisecretory/category_images/petrol.png"},{"id":"f13100ca-4052-c0f4-863a-5614d9631afb","name":"ATM","image_url":"http://52.25.198.71/miisecretory/category_images/atm.png"}]}}

Düzen dosyası:

    <?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:weightSum="5">    
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" />
    <HorizontalScrollView
        android:id="@+id/horizontalScroll"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">    
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

sınıf dosyası:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);
        for (int v = 0; v < collectionInfo.size(); v++) {
            /*---------------Creating frame layout----------------------*/

            FrameLayout frameLayout = new FrameLayout(ActivityMap.this);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, getPixelsToDP(90));
            layoutParams.rightMargin = getPixelsToDP(10);
            frameLayout.setLayoutParams(layoutParams);

            /*--------------end of frame layout----------------------------*/

            /*---------------Creating image view----------------------*/
            final ImageView imgView = new ImageView(ActivityMap.this); //create imageview dynamically
            LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            imgView.setImageBitmap(collectionInfo.get(v).getCatImage());
            imgView.setLayoutParams(lpImage);
            // setting ID to retrieve at later time (same as its position)
            imgView.setId(v);
            imgView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    // getting id which is same as its position
                    Log.i(TAG, "Clicked on " + collectionInfo.get(v.getId()).getCatName());
                    // getting selected category's data list
                    new GetSelectedCategoryData().execute(collectionInfo.get(v.getId()).getCatID());
                }
            });
            /*--------------end of image view----------------------------*/

            /*---------------Creating Text view----------------------*/
            TextView textView = new TextView(ActivityMap.this);//create textview dynamically
            textView.setText(collectionInfo.get(v).getCatName());
            FrameLayout.LayoutParams lpText = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER);
            // Note: LinearLayout.LayoutParams 's gravity was not working so I putted Framelayout as 3 paramater is gravity itself
            textView.setTextColor(Color.parseColor("#43A047"));
            textView.setLayoutParams(lpText);
            /*--------------end of Text view----------------------------*/

            //Adding views at appropriate places
            frameLayout.addView(imgView);
            frameLayout.addView(textView);
            linearLayout.addView(frameLayout);

        }

 private int getPixelsToDP(int dp) {
        float scale = getResources().getDisplayMetrics().density;
        int pixels = (int) (dp * scale + 0.5f);
        return pixels;
    }

burada çalışan hüner ImageView "imgView.setId (v)" atadığınız id ve onClickListener uyguladıktan sonra tekrar görünüm kimliğini alıyorum .... Ben de kod içinde yorum yaptık anlaşılması kolay, umarım bu çok faydalı olabilir ... Mutlu Kodlama ... :)

http://i.stack.imgur.com/lXrpG.png


1
Burada tüm açıklamayı düzenledim ve yayınladım, öneri için teşekkürler :)
Abdul Aziz

Merhaba kodunuz için teşekkürler yöntemi gönderebilir getPixelsToDP()miyim?
Skizo-ozᴉʞS

@Skizo Java kodunun sonuna bu yöntemi ekledim, bir göz atın
Abdul Aziz


5

Destek kütüphanesinde RecyclerView kullanabilirsiniz. RecyclerView, aşağıdakileri destekleyen genelleştirilmiş bir ListView sürümüdür:

  • Öğeleri konumlandırmak için bir düzen yöneticisi
  • Sık kullanılan öğe işlemleri için varsayılan animasyonlar

Android Recycler Dokümanları Görüntüle


Bu geç tarih itibariyle gerçek cevap bu. Ama bu bile henüz hazır değil ve hala 'önizleme'de'
Martin

3

Bu soruna bir çözüm bulmak için çok şey yaptım. Kısa cevap, özel yöntemleri ve bu tür şeyleri geçersiz kılmadan iyi bir çözüm yoktur. Bulduğum en iyi şey, onu kendimden sıfırdan uygulamaktı AdapterView. Oldukça sefil. Yatay ListView'ler hakkındaki SO sorumu görün .


Ne yazık ki cevabınız doğru. Google bile yatay liste görüntülemenin tek yolunun Galeri olduğunu onaylar. Ancak Galeri, yatay bir liste görünümü ile aynı değildir. Kodunuzu paylaşmak ister misiniz? Görünümleri geri dönüştürüyor musunuz?
Patrick Boos

1
Ne yazık ki kod benim şirket için yazılmıştır, bu nedenle bu nedenle tescilli. Ancak, önümüzdeki aylarda yeniden yazmak için boş zaman bulmayı umuyorum (orijinal uygulama oldukça kararsızdır) ve kamu malı olarak serbest bırakıyorum. Bu demosu Sony Ericsson'dan alarak , tüm 'x' i 'y' ve 'genişlik' i 'yükseklik' olarak değiştirerek başladığımı da söyleyebilirim . Sonra 3B dönüşümleri kaldırdım ve sondaki durma davranışını ekledim.
Neil Traft

@Neil Traft Eşya pozisyonunu nasıl düzelttiniz? Sonunda durmaya ne dersin?
Adrian Magdas

Dürüst olmak gerekirse, bu gerçekten çok fazla tahmindi. Bunu düzeltmek uzun zaman aldı ve daha iyi bir yol olduğuna ikna oldum. Ancak temel öncül, fillListDown()yöntemde, son liste öğesinin alt kenarını izlemeniz gerektiğidir. Ancak son öğeyi (adaptör.getCount () - 1) oluşturana kadar bu kenarın nerede olduğunu bilmiyorsunuz. Böylece bu öğe oluşturulana kadar bekler ve kenarın konumunu saklayabilirsiniz. Bunu öğrendikten sonra, mListTop'un hiçbir zaman 0'dan ve listenin yüksekliğinden daha fazla olmadığından emin olabilirsiniz.
Neil Traft

1
Gerçekten, gerçekten, KESİNLİKLE yatay bir listeye ihtiyacınız yoksa, Galeri'den vazgeçmenizi veya Galeri'yi kullanmanızı şiddetle tavsiye ederim.
Neil Traft

3

Aynı şeyi projelerimden biri için yapmak zorunda kaldım ve kendi projemi de yazdım. Buna HorzListView şimdi açık kaynaklı Aniqroid kütüphanemin bir parçası .

http://aniqroid.sileria.com/doc/api/ (Alt kısımdaki indirmeleri arayın veya daha fazla indirme seçeneği görmek için google kod projesini kullanın: http://code.google.com/p/aniqroid/downloads/list )

Sınıf belgeleri burada: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html


Kaydırma konumunu programlı olarak nasıl ayarlayabilirim?
Dima Portenko

setSelection () yöntemi var, ancak% 100 uygulanmamış olabilir. Dene.
Sileria

1

Uygulamam için, yönlendirmesi yatay olarak ayarlanmış LinearLayout içeren bir HorizontalScrollView kullanıyorum. İçine resim eklemek için etkinliğin içinde ImageViews oluşturup bunları LinearLayout'uma ekliyorum. Örneğin:

<HorizontalScrollView 
        android:id="@+id/photo_scroll"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scrollbars="horizontal"
        android:visibility="gone">

        <LinearLayout 
            android:id="@+id/imageview_holder"
            android:layout_width="wrap_content"
            android:orientation="horizontal"
            android:layout_height="match_parent">

        </LinearLayout>
    </HorizontalScrollView>

Bu benim için mükemmel çalışıyor. Aktivitede tek yapmam gereken aşağıdaki kod gibi bir şey:

LinearLayout imgViewHolder = findViewById(R.id.imageview_holder);
ImageView img1 = new ImageView(getApplicationContext());
//set bitmap
//set img1 layout params
imgViewHolder.add(img1);
ImageView img2 = new ImageView(getApplicationContext());
//set bitmap
//set img2 layout params
imgViewHolder.add(img2); 

Dediğim gibi bu benim için işe yarıyor ve umarım bunu başarmak isteyen birine de yardımcı olur.


0

metin görünümlerinizi her zaman dinamik olarak oluşturabilir ve onlicklisteners'ınızı bir adaptörle yaptığınız gibi ayarlayabilirsiniz


ne demek istiyorsun? seni alamıyorum Lütfen fikriniz hakkında kod pasajı gönderin?
Praveen

lütfen bana "yatay liste görünümünün" amacını söyleyin karmaşık / çoklu görünümleri olacak mı? örneğin 2 metin kutusu 1 ilerleme çubuğu? ya da sadece düz metin diyelim mi? Ayrıca o görünümün içinde sabit sayıda öğeniz var mı yoksa dinamik olarak değiştirmek mi istiyorsunuz? Bunları bana cevap ve ben kod ile size yardımcı mümkün olacak
poorwire

Yatay metin galerisini yapmak istiyorum. ancak seçilen öğe varsayılan olarak merkeze gelir. Seçilen öğeyi tıkladığım yerde olmak istiyorum. lütfen ayrıca yayınlarımı da kontrol edin: stackoverflow.com/questions/3237566/text-gallery-on-android and stackoverflow.com/questions/3318617/…
Praveen

0

Adaptördeki veriler başka bir iş parçacığında yer aldığında HorizontialListView çalışamaz. Her şey UI iş parçacığında% 100 çalışır.Bu, çoklu iş parçacığında büyük bir sorundur. Ben HorizontialListView daha iyi way.You hemen adapter.Then her konuda kodunu değiştirmek neednot HorzListView.You ile önceki Galeri yerini senin problem.HorzListView için en iyi çözüm değildir kullanarak düşünüyorum yol gidiyor sen hope.See https: // stackoverflow.com/a/12339708/1525777 HorzListView hakkında.


0

Projemde yatay liste görünümü bağlantısını kullandım ve iyi sonuçlar aldım. Kendimi kullanılmış olmuştu devsmart başlangıçta kütüphane ama bana bazı sorunlar verdi. Sorunlarımı giderirken yatay liste görünümü bağlantısını kullanmanın en iyi yolu ve son zamanlarda bu kütüphaneyi kullanarak Google PlayStore'da uygulamamı başlattım ve kullanıcılardan güzel yanıt aldım. Bu yüzden liste görünümünü yatay olarak göstermek için yukarıda bahsettiğim kütüphaneyi kullanmanızı tavsiye ederim. Zevk almak :)


0

Bunun için TwoWayView adlı harika bir kütüphane var, uygulanması çok kolay, sadece proje kütüphanesini çalışma alanınıza dahil edin ve orijinal projenize bir kütüphane projesi olarak ekleyin ve daha sonra burada belirtilen aşağıdaki adımları izleyin :

İlk olarak, (res / value / styles.xml) içindeki ListView (yatay veya dikey) yönünü belirten bir stil ekleyelim:

<style name="TwoWayView">
    <item name="android:orientation">horizontal</item>
</style>

Sonra,

Mizanpaj XML'inizde TwoWayView eklemek için aşağıdaki kodu kullanın:

<org.lucasr.twowayview.TwoWayView 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/lvItems"
     style="@style/TwoWayView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:drawSelectorOnTop="false"
     tools:context=".MainActivity" />

ve son olarak, sadece ilan edin ve herhangi bir normal gibi onunla ilgilenin ListView:

TwoWayView lvTest = (TwoWayView) findViewById(R.id.lvItems);

Tüm yöntemler ListViewburada her zamanki gibi çalışacaktır, ancak fark ettiğim tek bir fark var, bu da seçim modunu ayarlarken, yöntem setChoiceModebir intdeğer değil, enumçağrılan bir değer alır ChoiceMode, öyle list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);olacaktır lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE.


1
Bunu denedim - ama kendi ArrayAdapter'imi kullanmama izin vermiyor <ÖnizlemeGörüntü>
DeNitE Appz

-1

ViewFlipper'ı mizanpaj XML'ini dahil etmek ve görüntü, her mizanpaj XML'i için liste görünümü eklemek için kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.