Autore Topic: differenze visualizzazione layout  (Letto 1254 volte)

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
differenze visualizzazione layout
« il: 27 Aprile 2011, 15:45:58 CEST »
0
ok il titolo non è dei migliori,comunque ho notato delle differenze nella resa di un layout dichiarativo(file .xml) o programmatico(via codice),vi posto subito l'immagine:


nella versione programmatica ho un problema con le imageview,una cambia il colore dello sfondo mentre l'altra non mi disegna la barra separatrice prima dell'ultimo bottone sulla destra,il bug sta nel framework di bigG o nel mio cranio?
ecco la versione dichiarativa:
Codice (XML): [Seleziona]
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/action_bar"
        android:layout_width="fill_parent"
        android:layout_height="45dip"
        android:orientation="horizontal"
        android:background="@color/title_background"
>

        <ImageView
                android:id="@+id/actionbar_title_logo"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:clickable="true"
                android:contentDescription="@string/description_logo"
                android:src="@drawable/title_logo" />

        <View
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1" />

        <ImageView
                android:layout_width="1px"
                android:layout_height="fill_parent"
                android:background="@color/title_separator" />

        <ImageButton
                android:id="@+id/actionbar_btn_back"
                android:layout_width="45dip"
                android:layout_height="fill_parent"
                android:background="@drawable/title_button"
                android:contentDescription="@string/description_back"
                android:src="@drawable/ic_title_back" />

</LinearLayout>
ecco la programmatica(è la funzione per creare appunto la actionbar):
Codice (Java): [Seleziona]
        private LinearLayout setActionBarLayout() {
                ImageView imageviewLogo = new ImageView(this);
                View viewSpace = new View(this);
                ImageView imageviewSeparator = new ImageView(this);
                ImageButton imagebuttonBack = new ImageButton(this);

               
                LinearLayout llT = new LinearLayout(this);

                llT.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 45));
                llT.setOrientation(LinearLayout.HORIZONTAL);
                llT.setBackgroundResource(R.color.title_background);

                llT.addView(imageviewLogo);
                llT.addView(viewSpace);
                llT.addView(imageviewSeparator);
                llT.addView(imagebuttonBack);
               
               
                imageviewLogo.setLayoutParams(new LayoutParams(
                                LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
                imageviewLogo.setClickable(true);
                imageviewLogo.setImageResource(R.drawable.title_logo);
               

                viewSpace.setLayoutParams(new LayoutParams(new LayoutParams(0,
                                LayoutParams.FILL_PARENT)));
                LinearLayout.LayoutParams paramsllView;
                paramsllView = (LinearLayout.LayoutParams) viewSpace.getLayoutParams();
                paramsllView.weight = 1.0f;
                viewSpace.setLayoutParams(paramsllView);

                imageviewSeparator.setLayoutParams(new LayoutParams(1,
                                LayoutParams.FILL_PARENT));
                imageviewLogo.setBackgroundResource(R.color.title_separator);
               

                imagebuttonBack.setLayoutParams(new LayoutParams(45,
                                LayoutParams.FILL_PARENT));
                imagebuttonBack.setBackgroundResource(R.drawable.title_button);
                imagebuttonBack.setImageResource(R.drawable.ic_title_back);
               
               
                imageviewLogo.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View view) {
                               
                                Intent i = new Intent(view.getContext(), ActivityInfo.class);
                                view.getContext().startActivity(i);

                        }
                });

               
                imagebuttonBack.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View view) {
                               
                                finish();
                               
                        }
                });
               
               

                return llT;
        }
vi chiederete perchè non usi la versione dichiarativa?perchè vorrei che poter avere l'actionbar nell'activity delle opzioni (PreferenceActivity),ma l'unico modo che ho trovato è farlo via codice...se avete alternative fatemi sapere.8y3

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:differenze visualizzazione layout
« Risposta #1 il: 27 Aprile 2011, 20:38:40 CEST »
0
Per il problema della riga di 1px, se la metti di 5px appare oppure no? (per capire se è una questione di unità di misura)

Per il problema della ImageView, se forzi il background anche della ImageView come quello della barra, cosa accade?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:differenze visualizzazione layout
« Risposta #2 il: 27 Aprile 2011, 21:19:37 CEST »
0
Per il problema della riga di 1px, se la metti di 5px appare oppure no? (per capire se è una questione di unità di misura)
anche se la metto a 40 non appare.
Citazione
Per il problema della ImageView, se forzi il background anche della ImageView come quello della barra, cosa accade?
niente,il layout continua ad essere alterato come nell'immagine che ho postato prima.8y3

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:differenze visualizzazione layout
« Risposta #3 il: 27 Aprile 2011, 23:50:05 CEST »
0
l'immagine è un png con la trasparenza corretta vero?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:differenze visualizzazione layout
« Risposta #4 il: 28 Aprile 2011, 09:14:54 CEST »
+1
Ti propongo un esperimento, tutto da provare, per avere la actionbar usando il modo dichiarativo.

1) Crea il tuo layout XML della PreferenceActivity con l'accortezza di metterci una ListView con id "list". Io partirei dal layout standard della ListActivity (da cui è stata derivata la PreferenceActivity).

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="8dp"
        android:paddingRight="8dp">

     <ListView android:id="@id/android:list"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#00FF00"
              android:layout_weight="1"
              android:drawSelectorOnTop="false"/>

     <TextView android:id="@id/android:empty"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#FF0000"
              android:text="No data"/>
 </LinearLayout>

2) Nella PreferenceActivity imposta la view su questo nuovo layout (che avrà un suo id, esempio mio_preference_layout).

Codice (Java): [Seleziona]
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mio_preference_layout);
        //....        
    }
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:differenze visualizzazione layout
« Risposta #5 il: 28 Aprile 2011, 15:45:19 CEST »
0
l'immagine è un png con la trasparenza corretta vero?
si l'immagine ha la sua trasparenza,ho capito dove stava il bug,non nel framework di android :p
ho fatto un po di confusione con le variabili,in questo pezzo ho richiamato la variabile sbagliata:
Codice (Java): [Seleziona]
...
viewSpace.setLayoutParams(paramsllView);
imageviewSeparator.setLayoutParams(new LayoutParams(1,
               LayoutParams.FILL_PARENT));
imageviewLogo.setBackgroundResource(R.color.title_separator);
--------------
imagebuttonBack.setLayoutParams(new LayoutParams...
invece di richiamare imageviewSeparator o richiamato imageviewLogo,un errore di distrazione,scusate.
ho provato la soluzione di bradipo e funziona,userò quella perchè mi facilita la gestione delle preferenze:
Codice (Java): [Seleziona]
public class ActOption extends PreferenceActivity{
       
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
               
                requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
               
                super.onCreate(savedInstanceState);
           
            setContentView(R.layout.option);
           
            addPreferencesFromResource(R.xml.option);
           
                ImageView imgviewLogoapp = (ImageView) findViewById(R.id.actionbar_title_logo);
                imgviewLogoapp.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View view) {

                                Intent i = new Intent(view.getContext(), ActivityInfo.class);
                                view.getContext().startActivity(i);

                        }
                });

                ImageButton btnBack = (ImageButton) findViewById(R.id.actionbar_btn_back);
                btnBack.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View view) {

                                finish();

                        }
                });
        }
}

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

        <include
                layout="@layout/actionbar" />

        <ListView
                android:id="@id/android:list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:drawSelectorOnTop="false" />

        <TextView
                android:id="@id/android:empty"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#FF0000"
                android:text="No data" />
</LinearLayout>
grazie e alla prossima :) 8y3