Autore Topic: ScrollView e LinearLayout  (Letto 964 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
ScrollView e LinearLayout
« il: 07 Agosto 2014, 10:17:32 CEST »
0
Ho un problema e sinceramente non ne riesco ad uscirne fuori  :-X,
al seguito di un interrogazione sql prelevo i dati e li inserisco in una
txtw creata a runtime e tutto va a buon fine ad eccezione del fatto
che quando gli oggetti creati riempiono l'area dello schermo la
ScrollView mi scrolla solo al bottom e non al top, o meglio
tutto quello inserito in precedenza è che logicamente si trova al top
non è più possibile tramite lo scroll visualizzarli perchè? O:-)

questo è il fil del layout xml:
Codice: [Seleziona]
<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout"
    android:background="@drawable/sfondo">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|bottom"
        android:id="@+id/lnly1"
        android:background="#ffffffff"
        android:weightSum="1"
        android:gravity="bottom"
        android:baselineAligned="false">

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/edtMsg"
            android:layout_gravity="bottom"
            android:hint="messaggio qui"
            android:layout_weight="1" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/senPushB"
            android:layout_gravity="bottom"
            android:background="@android:drawable/ic_menu_send"
            style="@android:style/Theme.DeviceDefault.Panel"
            android:layout_marginLeft="10dp"
            android:clickable="false" />

        <Button
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btn_upl"
            android:background="@android:drawable/ic_menu_camera"
            android:layout_gravity="bottom" />

    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="441dp"
        android:id="@+id/scrollView"
        android:layout_gravity="bottom|top"
        android:fillViewport="true"
        android:measureAllChildren="true">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:id="@+id/lnymain"
            android:gravity="start|bottom|right|top"
            android:baselineAligned="false"
            android:measureWithLargestChild="false"
            android:orientation="vertical">

        </LinearLayout>
    </ScrollView>

</FrameLayout>

Qualche suggerimento? :D


Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #1 il: 07 Agosto 2014, 10:46:30 CEST »
0
Da qui si legge:
Citazione
FrameLayout is designed to block out an area on the screen to display a single item

Tu hai messo al suo interno un listview (lnly1) ed uno scrollview (scrollView) che è strano.

Prova ad usare un relativelayout al posto del framelayout.

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #2 il: 07 Agosto 2014, 11:25:28 CEST »
0
niente sempre lo stesso problema.
tutto quello che sta al top quando l'area dello schermo è piena di oggetti non viene più visto.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #3 il: 08 Agosto 2014, 10:35:48 CEST »
0
Potresti postare il codice che popola il listview?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #4 il: 08 Agosto 2014, 13:16:04 CEST »
0
ciao,
ma non sto usando la lstw, io creo delle textview a runtime e li inserisco dentro il LinearLayout

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #5 il: 08 Agosto 2014, 14:08:12 CEST »
0
Mi correggo: Potresti postare il codice che popola LinearLayout?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #6 il: 08 Agosto 2014, 14:43:55 CEST »
0
Codice: [Seleziona]
   LinearLayout linearLayout = (LinearLayout) findViewById(R.id.lnymain);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        linearLayout.setBackgroundColor(Color.TRANSPARENT);

        image2 = new ImageView(this);// (ImageView) findViewById(R.id.imageView);

        TextView txt1 = new TextView(this);
        txt1.setTextSize(16);
        txt1.setSingleLine(false);

        txt1.setText(data);
          Bitmap bmImg = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/M_G_DB/FOTOPROFILE/"+ utente_foto );
            image2.setImageBitmap(bmImg);

            txt1.setBackgroundResource(R.drawable.bubble_green);
       //     imguser(io);
            txt1.setTextColor(Color.RED);

            params.setMargins(150, 0, 10, 0);
            params.gravity = Gravity.RIGHT;

            image2.setX(10);
            image2.setY(-55);
            txt1.setGravity(Gravity.LEFT);
            txt1.setBottom(0);
            txt1.setY(10);
            txt1.setX(-60);

            txt1.setLayoutParams(params);
            image2.setLayoutParams(params);

            linearLayout.addView(txt1);
            linearLayout.addView(image2);

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #7 il: 08 Agosto 2014, 18:56:22 CEST »
0
Prova così:
Codice (XML): [Seleziona]
<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/frameLayout"
        android:background="@drawable/sfondo">

        <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|bottom"
                android:id="@+id/lnly1"
                android:background="#ffffffff"
                android:weightSum="1"
                android:gravity="bottom"
                android:baselineAligned="false"
               
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true">

                <EditText
                                android:layout_width="0dp"
                                android:layout_height="wrap_content"
                                android:id="@+id/edtMsg"
                                android:layout_gravity="bottom"
                                android:hint="messaggio qui"
                                android:layout_weight="1" />

                <Button
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:id="@+id/senPushB"
                                android:layout_gravity="bottom"
                                android:background="@android:drawable/ic_menu_send"
                                style="@android:style/Theme.DeviceDefault.Panel"
                                android:layout_marginLeft="10dp"
                                android:clickable="false" />

                <Button
                                style="?android:attr/buttonStyleSmall"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:id="@+id/btn_upl"
                                android:background="@android:drawable/ic_menu_camera"
                                android:layout_gravity="bottom" />

        </LinearLayout>

        <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/scrollView"
                android:layout_gravity="bottom|top"
                android:fillViewport="true"
                android:measureAllChildren="true"
               
                android:layout_alignParentLeft="true"
                android:layout_above="@+id/lnly1"
                >

                <LinearLayout
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:layout_gravity="center_horizontal|bottom"
                                android:id="@+id/lnymain"
                                android:gravity="start|bottom|right|top"
                                android:baselineAligned="false"
                                android:measureWithLargestChild="false"
                                android:orientation="vertical">

                </LinearLayout>
        </ScrollView>

</RelativeLayout>

Inoltre invece di creare TextView ed ImageView da codice, ti consiglierei di creare un nuovo layout simile a questo:

Codice (XML): [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       
        android:orientation="vertical"
        android:gravity="center_horizontal"
        >

        <TextView
                android:id="@+id/lblText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bubble_green"
                />

        <ImageView
                android:id="@+id/imgPicture"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />

</LinearLayout>

e poi nel codice usi:

Codice (Java): [Seleziona]
View item = getLayoutInflater().inflate(R.layout.nuovo_layout, linearLayout, false);
TextView txt1 = item.findViewById(R.id.lblText);
ImageView image2 = item.findViewById(R.id.imgPicture);
Bitmap bmImg = BitmapFactory.decodeFile(...);
image2.setImageBitmap(...);
...
linearLayout.addView(item);

in questo modo oltre a mantenere il codice più leggero e leggibile puoi correggere l'aspetto della textview e dell'imageview da codice xml risparmiandoti molti effetti collaterali.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #8 il: 10 Agosto 2014, 12:50:58 CEST »
0
Grande Ohmnibus!!
Risolto

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #9 il: 11 Agosto 2014, 16:24:53 CEST »
0
Allora riprendo questo post non perchè non è stato risolto, ma bensì per capire se è possibile recuperare l'id degli oggetti creati con il metodo suggerito da Ohmnibus?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #10 il: 12 Agosto 2014, 13:09:56 CEST »
0
Dato che si usa sempre lo stesso layout gli id sono sempre gli stessi. Se hai bisogno di accedere a delle particolari istanze l'unico modo è tenere un riferimento alle viste aggiunte al LinearLayout.
Puoi usare ad esempio un ArrayList<View> dove metti "item" appena dopo l'inflate.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #11 il: 13 Agosto 2014, 13:24:50 CEST »
0
ciao Ohmnibus,
hai un'esempio ho mi puoi indirizzare a qualche esempio

Post unito: [time]13 Agosto 2014, 14:38:30 CEST[/time]
ok!
Codice: [Seleziona]
   txt1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
             
                    ArrayList<View> touchables = item.getTouchables();
                           for (View b : touchables) {
                               if (b instanceof TextView) {
                                  Toast.makeText(MyActivity.this,((TextView) b).getText(),Toast.LENGTH_LONG).show();
                 
                             }
                }}
            });
« Ultima modifica: 13 Agosto 2014, 14:40:09 CEST da x69asterix2 »

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:ScrollView e LinearLayout
« Risposta #12 il: 25 Settembre 2014, 08:24:17 CEST »
0
Riapro questo post dopo un po di tempo per sapere se è possibile inserire due item provenienti da due activity diverse.
Praticamente ad una condizione in base alla risposta dovrei inserire uno o l'altro:
Il problema è se si come procedere?


Codice: [Seleziona]
   View item = getLayoutInflater().inflate(R.layout.person_item, linearLayout, false);
            TextView txt1 = (TextView) item.findViewById(R.id.edt_locale);
           
            View item2 = getLayoutInflater().inflate(R.layout.person_item2, linearLayout, false);
            TextView txt2 = (TextView) item2.findViewById(R.id.edt_locale2);
            linearLayout.addView(item2);
            linearLayout.addView(item);
oppure:
Codice: [Seleziona]
    final View item;
            TextView txt1;
            LinearLayout linearLayout = (LinearLayout) findViewById(R.id.lnymain);
         if (!miacondizione.equals("0")) {
              item = getLayoutInflater().inflate(R.layout.activity_audio, linearLayout, false);
              txt1 = (TextView) item.findViewById(R.id.txt_tempo);
         }else{
              item = getLayoutInflater().inflate(R.layout.person_item, linearLayout, false);
              txt1 = (TextView) item.findViewById(R.id.edt_locale);
         }
         
             linearLayout.addView(item);
« Ultima modifica: 25 Settembre 2014, 09:04:15 CEST da x69asterix2 »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 762
  • Respect: +159
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ScrollView e LinearLayout
« Risposta #13 il: 25 Settembre 2014, 11:29:21 CEST »
0

Non ho capito per nulla cosa vorresti fare, ma se per "item" intendi una View, allora è in genere una cattiva idea mettere a fattor comune viste di Activity differenti.

Ti consiglierei di creare una classe che contiene le informazioni di cui hai bisogno, creare e popolare un'istanza di quella classe e poi usare quella.

Comunque, ripeto: non ho capito cosa vuoi fare, e mi perdonerai se non perdo 15 minuti a rileggere tutto il thread.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.