【问题标题】:Scrollable TextView in ViewPagerViewPager 中的可滚动 TextView
【发布时间】:2014-03-25 17:22:17
【问题描述】:

我在ViewPager 中的Fragment 中有一个TextView,我想让TextView 中的文本可滚动。由于某种原因,这不起作用,并且文本视图不滚动。

这是我尝试过的:

片段中的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
   ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_profile_view, container, false);
   about = (TextView) view.findViewById(R.id.profileView_aboutContent_textView);
   about.setMovementMethod(new ScrollingMovementMethod());  
   return view;

}

xml:

<TextView
    android:id="@+id/profileView_aboutContent_textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/profileView_age_editText"
    android:layout_alignBottom="@+id/profileView_age_editText"
    android:layout_marginLeft="30dp"
    android:layout_toRightOf="@+id/profileView_profileName_textView"
    android:scrollbars="vertical"
    android:maxLines="5"
    android:text="@string/provisional_about_text"
    android:textColor="#0066CC" />

我知道这是可行的,因为我用它来制作一个可滚动的 tetxview,它在一个活动中,而不是在 ViewPager 的片段中。当我在我的片段中尝试相同的方法时,它不起作用。 我还尝试将 setmovementmethod 应用于片段类中 onStart 方法中的 textview,但这也不起作用。我还认为 textview 的 TextView id 有问题,它返回 null 所以我尝试使用 setText() 设置 TextView 文本;在片段中查看该类是否正在获取 textview id 并且它确实有效,所以我不知道为什么 setmovementmethod 不起作用。

有人知道可能是什么问题吗?

感谢您的帮助。

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    我发现了问题所在。 TextView 垂直滚动,因为它遵循 Pager View 行为,即从一个片段水平移动到另一个片段,因此我不得不告诉 Fragment 类中的 TextView 不要遵循父行为。

    这是代码:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_profile_view, container, false);
         about = (TextView) view.findViewById(R.id.profileView_aboutContent_textView);
        about.setOnTouchListener(new View.OnTouchListener() {
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                about.getParent().requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });
    
         about.setMovementMethod(new ScrollingMovementMethod());  
        return view;
    

    【讨论】:

      【解决方案2】:

      在这样的布局中向 textview 添加滚动视图...

       <ScrollView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content">
      <TextView
          android:id="@+id/testText"
          android:text="@string/hello_world"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" />
      </ScrollView>
      

      这是它与 Viewpager 一起正常工作的完整代码..

      MainActivity.java

      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
          ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
      
          viewPager.setAdapter(adapter);
          viewPager.setCurrentItem(0);
      }
      

      activity_main.xml

       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical" android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <android.support.v4.view.ViewPager
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/pager"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
      </LinearLayout>
      

      MainActivity 中的 ViewPagerAdapter 类

       private class ViewPagerAdapter extends FragmentStatePagerAdapter {
          public ViewPagerAdapter(FragmentManager fm) {
              super(fm);
          }
      
          @Override
          public Fragment getItem(int position) {
              return new TestFragment();
          }
      
          @Override
          public int getCount() {
              return 3;
          }
      }
      

      TestFargment.java

       public class TestFragment extends Fragment
      {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                               Bundle savedInstanceState) {
          // Inflate the layout for this fragment
          View row =  inflater.inflate(R.layout.activity_main, container, false);
      
          TextView textView = (TextView)row.findViewById(R.id.profileView_aboutContent_textView);
          textView.setMovementMethod(new ScrollingMovementMethod());
          return row;
        }
      }
      

      【讨论】:

      • 这在片段中也不起作用,我已经尝试过了,它确实适用于活动,但不适用于我的片段。我不知道为什么片段视图中没有任何效果。
      • 我应该工作。你能告诉你的活动代码你是如何将片段添加到其中的吗?
      • 我有 3 个片段,我正在使用 viewPagerAdapter,因此用户可以从一个片段滑动到另一个片段。 viewPagerAdapter 实例化了 3 个片段。然后从活动中,我设置了包含如下片段的视图: private void setUpView(){ viewPager = (ViewPager) findViewById(R.id.profileView_viewPager);适配器 = 新 ViewPagerAdapter(getApplicationContext(),getSupportFragmentManager()); viewPager.setAdapter(适配器); viewPager.setCurrentItem(0); }
      • 查看我的更新答案。根据您的要求,我有一个示例代码。
      • 是的,我已经完成了所有这些,但它不起作用,无论如何感谢您的帮助。
      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 2012-02-02
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2013-05-25
      • 1970-01-01
      相关资源
      最近更新 更多