2015-12-30 2 views
2

В моей деятельности у меня есть FrameLayout, которые предполагается использовать в качестве контейнера для фрагментов.ScrollView внутри фрагмента не прокручивается

В моем фрагменте я получил ScrollView, который не отвечает. ScrollView содержит TextView комплект android:layout_height="wrap_content", с текстом из моего кода Java, который явно длиннее размера ScrollView.

Мой фрагмент XML:

<?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"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="@dimen/bookview.imageWidth" 
      android:layout_height="250dp" 
      android:id="@+id/bookView.image"/> 
     <TextView 
      android:textSize="@dimen/custom_book_text" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_toEndOf="@id/bookView.image" 
      android:id="@+id/bookView.name"/> 
     <TextView 
      android:textSize="@dimen/custom_book_text" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_toEndOf="@id/bookView.image" 
      android:layout_below="@id/bookView.name" 
      android:id="@+id/bookView.author"/> 
     <TextView 
      android:textSize="@dimen/custom_book_text" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_toEndOf="@id/bookView.image" 
      android:layout_below="@id/bookView.author" 
      android:id="@+id/bookView.pages"/> 
     <TextView 
      android:textSize="@dimen/custom_book_text" 

      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_toEndOf="@id/bookView.image" 
      android:layout_below="@id/bookView.pages" 
      android:id="@+id/bookView.category"/> 
     <TextView 
      android:textSize="@dimen/custom_book_text" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_toEndOf="@id/bookView.image" 
      android:layout_below="@id/bookView.category" 
      android:id="@+id/bookView.publishingDate"/> 
    </RelativeLayout> 
    <ScrollView 
     android:layout_height="200dp" 
     android:layout_width="match_parent" 
     android:layout_gravity="end"> 
     <TextView 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:textSize="@dimen/custom_book_text" 
      android:id="@+id/bookView.description"/> 
    </ScrollView> 
</LinearLayout> 

XML-активности:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/use.drawer"> 

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

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/user_custom_book_height" 
      android:id="@+id/user.customBookContainer"/> 
     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:id="@+id/user.container"/> 
    </LinearLayout> 

    <include 
     layout="@layout/navigation_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"/> 
</android.support.v4.widget.DrawerLayout> 

я использую FrameLayout, потому что я хочу, чтобы изменить фрагмент в этой области, в runtime.better идее ? Мне нравится слышать.

Я попытался уменьшить вершину ScrollView. мой фрагмент кода Java:

public class BookView extends Fragment { 

    private Bitmap bitmap; 
    private String name; 

    public static BookView newInstance(String book,Bitmap bitmap) { 

     Bundle args = new Bundle(); 
     BookView fragment = new BookView(); 
     fragment.bitmap = bitmap; 
     fragment.name = book; 
     fragment.setArguments(args); 
     return fragment; 
    } 

    public BookView() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v = inflater.inflate(R.layout.fragment_book_view, container, true); 
     Backend backend = BackendFactory.getInstance(); 
     try { 
      Book b = backend.readBook(name); 
      TextView textView = (TextView)v.findViewById(R.id.bookView_name); 
      textView.setText(b.getBookName()); 
      textView = (TextView)v.findViewById(R.id.bookView_author); 
      textView.setText(b.getAuthor()); 
      textView = (TextView)v.findViewById(R.id.bookView_category); 
      textView.setText(b.getCategory().name()); 
      textView = (TextView)v.findViewById(R.id.bookView_description); 
      textView.setText(b.getDescription()); 
      textView = (TextView)v.findViewById(R.id.bookView_pages); 
      textView.setText(Integer.toString(b.getPages())); 
      textView = (TextView)v.findViewById(R.id.bookView_publishingDate); 
      textView.setText(b.getPublishingDate()); 
      final ImageView imageView = (ImageView)v.findViewById(R.id.bookView_image); 
      if(bitmap != null){ 
       imageView.setImageBitmap(bitmap); 
      } else{ 
       ImageLoader imageLoader = new ImageLoader(); 
       imageLoader.setListener(new ImageLoader.ImageTaskListener() { 
        @Override 
        public void onActionEnd() {} 

        @Override 
        public void onImageDownload(Bitmap bitmap) { 
         imageView.setImageBitmap(bitmap); 
        } 
       }); 
       imageLoader.execute(b.getImage()); 
      } 
     } 
     catch (Exception e) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      builder.setMessage(e.getMessage()); 
      builder.create().show(); 
     } 

     return inflater.inflate(R.layout.fragment_book_view, container, false); 
    } 
} 

imageLoader класс я написал, что extened AsyncTask для загрузки изображения из URL и обновления пользовательского интерфейса, когда он готов.

+0

Почему вы используете framelayout для фрагментов, по какой-либо конкретной причине? –

+0

можете ли вы разместить свой код, снимок экрана будет лучше? –

+1

попробуйте использовать линейную компоновку или относительную, а не framelayout. –

ответ

0

Я предполагаю, что вы можете увидеть вид фрагмента.

Если так несколько вещей, чтобы попробовать:

Установите вид прокрутки fillViewPort = «истинный» , а затем установить вид текста, чтобы соответствовать родителя, так как это единственный вид в окне прокрутки. В качестве примечания вам следует действительно избегать использования строчных кодированных ширин & высот (даже высоты dp).

Вместо возвращения

return inflater.inflate(R.layout.fragment_book_view, container, false); 

просто вернуть первоначальный вид: v

бит Nother»читаемости: вместо переназначения TextView каждый раз. сделать:

((TextView)v.findViewById(R.id.blabla)).setText("BLA"); 

Edit:

Я испытал это & он работает.

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="2" 
    android:fillViewport="true"> 
    <TextView 
     android:id="@+id/faq_output_answer" 
     android:layout_width="match_parent" 
     android:layout_margin="10dp" 
     android:layout_height="match_parent" /> 
</ScrollView> 
+0

, это не сработало. – user4349397

+0

Можете ли вы увидеть текст в текстовом виде (это внутри прокрутки)? Также попробуйте отредактировать. – Austi01101110

+0

Я проверил ваш код, все еще та же реакция, я вижу серый скроллер в стороне, когда я касаюсь ScrollView, но я не прокручиваю. Так что он запускает событие и что он должен прокручиваться, потому что серый скроллер меньше, когда я не может видеть весь текст. – user4349397

0

Я думаю, что другие части (TextViews и ImageViews) этого фрагмента Полноценный площадь экрана и Scrollview вынести из экрана. Я предлагаю вам разместить весь макет внутри ScrollView. так:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="end"> 

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

    <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     <ImageView 
       android:id="@+id/bookView.image" 
       android:layout_width="@dimen/bookview.imageWidth" 
       android:layout_height="250dp"/> 

     <TextView 
       android:id="@+id/bookView.name" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_toEndOf="@id/bookView.image" 
       android:textSize="@dimen/custom_book_text"/> 

     <TextView 
       android:id="@+id/bookView.author" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/bookView.name" 
       android:layout_toEndOf="@id/bookView.image" 
       android:textSize="@dimen/custom_book_text"/> 

     <TextView 
       android:id="@+id/bookView.pages" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/bookView.author" 
       android:layout_toEndOf="@id/bookView.image" 
       android:textSize="@dimen/custom_book_text"/> 

     <TextView 
       android:id="@+id/bookView.category" 

       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/bookView.pages" 
       android:layout_toEndOf="@id/bookView.image" 
       android:textSize="@dimen/custom_book_text"/> 

     <TextView 
       android:id="@+id/bookView.publishingDate" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/bookView.category" 
       android:layout_toEndOf="@id/bookView.image" 
       android:textSize="@dimen/custom_book_text"/> 
    </RelativeLayout> 

    <TextView 
      android:id="@+id/bookView.description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="@dimen/custom_book_text"/> 

</LinearLayout> 

+0

Я хочу только описание TextView для прокрутки всех остальных вещей должно быть статическим – user4349397

+0

Размер другой части - полный экран. На маленьком экране вы не можете справиться с этим! – Fred

+0

Это большая проблема на маленьком экране! Вы должны выбрать одну из этих стратегий: -Используйте два ScrollView для обработки верхней части и нижней части. Эти два ScrollView заполняют всю область экрана. -Используйте мое предложение выше – Fred

0

Попробуйте положить пустой вид как последний пункт в вашем Scrollview.

<View 
android:layout_width = "match_parent" 
android:layout_height = "50dp" /> 

Это сработало для меня.

Смежные вопросы