2010-12-20 14 views
11

Soy nuevo en Android y he estado buscando una solución a esto, pero hasta ahora no tuve suerte. Me gustaría crear un diseño que sea algo así como la imagen de abajo.Disposición dentro de horizontalScrollView que es el tamaño de la pantalla

Me gustaría tener un LineLayout que tenga el tamaño de la pantalla. Luego, tengo otro LineLayout que también tiene el tamaño de la pantalla pero no la pantalla. Luego puedo desplazarme entre las dos "pantallas" virtuales.

enter image description here

Hay un interesante artículo que explica cómo extender la clase ScrollView para que pudiera conseguir un efecto fresco romperse, así que si puedo conseguir que esto funcione, mi aplicación se sentirá mucho como desplazarse entre el hogar pantallas.

He leído acerca de los pesos y también acerca de scrollView's fillViewport = "true". Me temo que no entiendo cómo se pueden utilizar con horizontalScrollView para que lineLayouts llene la pantalla. He intentado todo tipo de combinaciones de fill_parent y wrap_content pero fue en vano.

Como lo veo, esta funcionalidad no afectará la portabilidad de la aplicación entre dispositivos que tienen pantallas diferentes siempre y cuando construya las sub-vistas (los elementos en cada "pantalla") con la variabilidad de la pantalla en mente.

Aquí está un ejemplo sencillo del XML que estaba tratando:

<HorizontalScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/HorizontalScrollView01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:fillViewport="true"> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:id="@+id/txtTestBox" 
      > 
     </EditText> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Button 1" 
     /> 

    </LinearLayout> 

</LinearLayout> 

</HorizontalScrollView> 

Por desgracia, que ni siquiera se acercan a lo que yo estoy buscando. Esperemos que esto se puede hacer ...

Gracias por cualquier ayuda o sugerencia.

+0

Pensé que podría ser útil colocar un enlace al código 'complemento' al que me refería. Se puede encontrar aquí: http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/ – paradoX

+0

Un ejemplo adicional de la funcionalidad que busco implementar se puede encontrar en la aplicación móvil de Firefox para Android. La barra de pestañas que está en el lado izquierdo de la página (fuera de la pantalla hasta que se desplace) parece crear de alguna manera una superficie desplazable que tiene una subvista que tiene el tamaño exacto de la pantalla (crea una "pantalla" que es del tamaño de la pantalla del teléfono físico, y cuando el usuario se desplaza, puede ver sus pestañas y la pantalla). Espero que esto aclare mi pregunta. – paradoX

Respuesta

1

Una vista de desplazamiento horizontal puede escalar infinitamente de lado a lado, por lo que "Fill Parent" probablemente no funcionará como esperaba en los diseños internos. ¿Has intentado especificar explícitamente un ancho en los diseños internos?

algo como:

<HorizontalScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/HorizontalScrollView01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:fillViewport="true"> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="400dp" 
    android:layout_height="fill_parent"> 

..... 

</LinearLayout> 


</HorizontalScrollView> 
+0

Este es el enfoque que ahora estoy tomando. Esperaba evitar formatear manualmente cada vista, pero parece que esta es la única opción. ¡Gracias! – paradoX

0

¿Hay alguna razón específica por la que necesita tener virtualmente 2 pantallas dentro de una? ¿Por qué no solo separarlos? Puede ampliar GestureDetector para que cuando se produzca un gesto de desplazamiento, 'encaje' en la siguiente pantalla automáticamente

+0

Buena pregunta, estoy interesado en esto porque creo que permitirá una interfaz más intuitiva. Dado que mi interfaz es algo compleja, creo que la capacidad de 'echar un vistazo' a lo que está en la pantalla siguiente será útil. Además, en este punto, quiero saber cómo hacer esto para saber que se puede hacer (hace tiempo que me estoy sacudiendo la cabeza por este problema, así que no quiero rendirme).Si no puedo encontrar una respuesta, planeo recurrir a algo como lo que propones. – paradoX

+0

Por cierto, el enlace al código 'complemento' al que me refería se puede encontrar aquí: http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/ – paradoX

+0

Esto no es realmente una respuesta a la pregunta. Afortunadamente, hay una mejor respuesta disponible. Tal vez pueda encontrar una respuesta en el código fuente móvil de Firefox ... – paradoX

1

See here La solución fue usar android:fillViewport="true" en la ScrollView. hay necesidad de fijar anchura LinearLayout.

 <HorizontalScrollView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="5dp" 
      android:fillViewport="true" 
      android:orientation="vertical" 
      android:scrollbars="none"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 
       //create your views 
      </LinearLAyout> 
</HorizontalScrollView> 
Cuestiones relacionadas