ScrollView内部片段不滚动

时间:2015-12-30 18:35:55

标签: android scrollview

在我的活动中,我有一个FrameLayout,假设用作片段的容器。

在我的片段中,我得到了一个没有回应的ScrollViewScrollView包含TextViewandroid: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是我写的一个类,它从url扩展了AsyncTask以下载图像,并在准备就绪时更新UI。

3 个答案:

答案 0 :(得分:0)

我假设您能够看到片段的视图。

如果有以下几点要尝试:

将滚动视图设置为fillViewPort =&#34; true&#34; 然后设置文本视图以匹配父级,因为这是滚动视图中的唯一视图。作为一个注释你应该真的避免使用硬编码宽度&amp;高度(甚至dp高度)。

而不是返回

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

只返回原始视图:v

诺特尔&#39;可读性:不是每次都重新分配textview。 做:

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

修改

我测试了这个&amp;有用。

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

答案 1 :(得分: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>

答案 2 :(得分:0)

尝试将空视图作为滚动视图中的最后一项。

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

这对我有用。