support library last android android-layout android-design-library

library - com.android.support:appcompat-v7 last version



Android NestedScrollView tiene un tamaño incorrecto después de la aplicación: layout_behavior (3)

Tuve este problema y lo solucioné agregando:

android:layout_gravity="fill_vertical"

al NestedScrollView. Entonces comienza a comportarse correctamente, como expliqué here también. Por supuesto, NestedScrollView necesita algún tipo de elemento secundario (es decir, no debe estar vacío), de lo contrario, la barra de herramientas no se colapsará.

Actualizar

Si bien esto funciona bien con contenido pequeño, noté que tiene algunos problemas para mostrar contenidos más largos, por ejemplo, como el activity_detail.xml completo anterior. El problema es que no se puede desplazar a la parte inferior del contenido, ya que no se puede acceder al contenido.

De mis pruebas pude encontrar que la parte faltante es tan grande como la barra de herramientas colapsada (o al menos eso es lo que me parece). Para solucionar este problema, y ​​al tener una solución confiable para contenido pequeño y grande, debe agregar un layout_marginBottom a ScrollView, para que se mida y libere la parte inferior que falta. Así:

android:layout_gravity="fill_vertical" android:layout_marginBottom="?attr/actionBarSize"

o cualquier tamaño que le hayas dado a la Toolbar .

Pero aún

El desplazamiento con contenido pequeño con esta solución, incluso si el contenido está alineado de manera justa en la parte superior, no es tan suave como el desplazamiento con contenido grande. Voy a usar hasta que llegue una revisión de la biblioteca.

Actualización2

Parece que esto fue arreglado en v22.2.1.

Desde que Google ha publicado la biblioteca de soporte de diseño para Android, hay muchas cosas buenas que se pueden hacer sin implementar un código personalizado. Mientras he probado las vistas personalizadas en esta biblioteca, he encontrado algo peor y no sabía si esto es un error o no.

He encontrado el proyecto cheesesquare en github. En el activity_detail.xml (archivo de diseño) hay 3 CardViews dentro de NestedScrollView. Si elimina 2 de ellos, puede ver que NestedScrollView no tiene el tamaño completo del padre (match_parent). El NestedScrollView está vinculado a la parte inferior de la vista principal. http://i.stack.imgur.com/BXl7w.png

El NestedScrollView obtiene su tamaño completo cuando app:layout_behavior="@string/appbar_scrolling_view_behavior" la app:layout_behavior="@string/appbar_scrolling_view_behavior" .

Pero cuando elimino el comportamiento del diseño, la barra de herramientas no está colapsada.

¿Hay algún arreglo para esto? El archivo de diseño de ejemplo se puede encontrar aquí: https://github.com/Smove/cheesesquare/blob/stackoverflow/app/src/main/res/layout/activity_detail.xml

Puedes crear el apk cheesesquare desde mi rama de github stackoverflow


utilice RecyclerView para reemplazar a NestedScrollView, corrija este conjunto de elementos de error, 1, para que ViewHolder devuelva su contenido real View;

mi código:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); // 添加分割线 recyclerView.addItemDecoration(new DividerItemDecoration(getApplicationContext())); recyclerView.setAdapter(new Adapter<ViewHolder>() { @Override public int getItemCount() { return 1; } @Override public void onBindViewHolder(ViewHolder holder, int arg1) { WebView view = (WebView) holder.itemView; view.getSettings().setJavaScriptEnabled(true); view.loadUrl("http://www.baidu.com"); } @Override public ViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) { return new ViewHolder(inflater.inflate(R.layout.webview, arg0, false)) { }; } });


Solución

Antes de mostrar mi NestedScrollView y después de vincular los datos al contenido de NestedScrollView, llamo al método fullScroll (int direction) de mi instancia de NestedScrollView con la dirección View.FOCUS_UP como argumento.

Ejemplo de código para un fragmento:

NestedScrollView scrollView = (NestedScrollView) getActivity (). FindViewById (R.id.scroll_view); scrollView.fullScroll (View.FOCUS_UP);