textview

时间:2017-05-13 08:39:09

标签: android textview fragment space

我有一个viewpager,里面有一个textview 为了填充viewpager的页面,我应该用textpaint测量textview行高 当设置viewpager适配器时,我的问题是在2个差异页面行号相等但页面textview高度不同而我想要textview适合页面,它发生在android 4.4.2及以下,我该如何解决这个问题。 请注意,我不能使用maxLine ellipsize或类似其他解决方案,因为textview行号不确定。
image 1

image2

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    tools:context="ru.appheads.pagesplitterapp.MainActivity">

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pages"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent">

    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:layout_width="match_parent"
        android:background="#000000"
        android:layout_height="1dp"></LinearLayout>

    <SeekBar
        android:id="@+id/pageSeekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="50"
        android:progress="0"/>

    <SeekBar
        android:id="@+id/sizeSeekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="45"
        android:progress="0"/>

    <SeekBar
        android:id="@+id/lineSpaceSeekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="40"
        android:progress="0"/>
</LinearLayout>

page.xml

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

</TextView>

PageFragment:

public class PageFragment extends Fragment {
    private final String PAGE_TEXT = "PAGE_TEXT";
    private final String TEXT_SIZE = "TEXT_SIZE";
    private final String LINE_SPACE = "LINE_SPACE";

    public PageFragment newInstance(CharSequence pageText, float textSize, float lineSpace) {
        PageFragment frag = new PageFragment();
        Bundle args = new Bundle();
        args.putCharSequence(PAGE_TEXT, pageText);
        args.putFloat(TEXT_SIZE, textSize);
        args.putFloat(LINE_SPACE, lineSpace);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        CharSequence text = getArguments().getCharSequence(PAGE_TEXT);
        float textSize = getArguments().getFloat(TEXT_SIZE);
        float lineSpace = getArguments().getFloat(LINE_SPACE);
        TextView pageView = (TextView) inflater.inflate(R.layout.page, container, false);
        pageView.setTextSize(TypedValue.COMPLEX_UNIT_PX, UnitConverter.spToPixels(getContext(), textSize));
        pageView.setText(text);
        Typeface plain = Typeface.createFromAsset(getContext().getAssets(), "Roboto_Medium.ttf");
        pageView.setTypeface(plain);
        pageView.setLineSpacing(UnitConverter.spToPixels(getActivity(),lineSpace), 1f);
        pageView.setMovementMethod(LinkMovementMethod.getInstance());
        return pageView;
    }


}

2 个答案:

答案 0 :(得分:1)

您的基本布局LinearLayout更改为RelativeLayout尝试此操作:

     <?xml version="1.0" encoding="utf-8"?>
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                tools:context="ru.appheads.pagesplitterapp.MainActivity">

                <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/pages"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingBottom="10dp"
                    android:layout_above="@+id/obttom_layout"
                    android:layout_alignParentTop="true">

                </android.support.v4.view.ViewPager>

                <LinearLayout
                    android:id="@+id/obttom_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:orientation="vertical">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="1dp"
                        android:background="#000000"></LinearLayout>

                    <SeekBar
                        android:id="@+id/pageSeekbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:max="50"
                        android:progress="0" />

                    <SeekBar
                        android:id="@+id/sizeSeekbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:max="45"
                        android:progress="0" />

                    <SeekBar
                        android:id="@+id/lineSpaceSeekbar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:max="40"
                        android:progress="0" />
                </LinearLayout>
            </RelativeLayout>

Page Xml:

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

                <TextView 
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                     android:id="@+id/pages_txt"
                    android:ellipsize="end"
                    android:gravity="left" >

                </TextView>
            </LinearLayout>

        </ScrollView>

答案 1 :(得分:1)

当然,它的设备具体问题。

要在所有设备中获得更好的输出,您应该使用ScrollView作为TextView的容器。

此外,如果您想在文字extra space之间添加一些lines,那么您可以通过编程方式使用textView.setLineSpacing(),或者从XML使用属性android:lineSpacingMultiplier="1.3"TextView以获得额外的间距。

希望这会有所帮助〜