我想要和活动来显示一些统计信息。在这个活动中,我想输入开始和结束日期,并与它们一起显示一些统计数据和一些图形。为此,我创建了一个活动,其中我选择输入日期的顶部是固定的。然后我有一个TablLayout和一个viewpager,我在其中显示统计信息和图形。 所有这些似乎工作正常,这是result on the activity。但是,我的问题是双重的: 一方面,我无法自动调整viewpager的大小以适应活动高度并正确显示片段的内容。如果我将viewpager设置为wrap_content并将片段设置为match_parent,则不会显示任何内容。但是,如果我手动填充viewpager高度,那么我可以看到viewpager工作(但没有正确调整活动高度)。 另一方面,当我能够看到viewpager内容时,我只想滚动viewpager的内容。但是,如果我插入scrollview或nestedscrollview,则整个活动会滚动,这是我不想要的。 这是我希望将所有这些组合在一起的活动布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.app.asaak.activities.InformesActivity"
tools:showIn="@layout/activity_informes">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="10dp"
>
<!-- ================ LAYOUT BOTONES ================ -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
>
<!-- ================ BOTON DESDE ================ -->
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/informes_boton_desde"
android:text="DESDE"
android:layout_weight="1"
/>
<!-- ================ BOTON HASTA ================ -->
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/informes_boton_hasta"
android:text="HASTA"
android:layout_weight="1"
/>
</LinearLayout>
<!-- ================ LAYOUT TEXT ================ -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:weightSum="2"
>
<!-- ================ TEXTVIEW DESDE ================ -->
<com.app.asaak.textViews.CTextViewName
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="dd/mm/aaaa"
android:id="@+id/informes_text_desde"
android:textSize="20sp"
android:textAlignment="center"
/>
<!-- ================ TEXTVIEW HASTA ================ -->
<com.app.asaak.textViews.CTextViewName
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="dd/mm/aaaa"
android:id="@+id/informes_text_hasta"
android:textSize="20sp"
android:textAlignment="center"
/>
</LinearLayout>
<!-- VIEWPAGER -->
<android.support.design.widget.TabLayout
android:id="@+id/tabs_informes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!-- VIEWPAGER -->
<android.support.v4.view.ViewPager
android:id="@+id/pager_informes"
android:layout_width="match_parent"
android:layout_height="1000dp"
android:layout_below="@id/tabs_informes"
/>
</LinearLayout>
</RelativeLayout>
这是我想要放在标签信息或标签图形上的两个内容的示例。
标签图片:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto">
<!-- GRAPHICS AND INFORMATION HERE THAT DOESN'T FIT THE ACTIVITY SO MUST BE SCROLLED -->
</LinearLayout>
正如你可以看到viewpager高度是强制的,如果我把wrap_content我看不到任何东西。
我该怎么做?谢谢!
答案 0 :(得分:0)
试试这个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.app.asaak.activities.InformesActivity"
tools:showIn="@layout/activity_informes">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp"
>
<!-- ================ LAYOUT BOTONES ================ -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
>
<!-- ================ BOTON DESDE ================ -->
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/informes_boton_desde"
android:text="DESDE"
android:layout_weight="1"
/>
<!-- ================ BOTON HASTA ================ -->
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/informes_boton_hasta"
android:text="HASTA"
android:layout_weight="1"
/>
</LinearLayout>
<!-- ================ LAYOUT TEXT ================ -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:weightSum="2"
>
<!-- ================ TEXTVIEW DESDE ================ -->
<com.app.asaak.textViews.CTextViewName
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="dd/mm/aaaa"
android:id="@+id/informes_text_desde"
android:textSize="20sp"
android:textAlignment="center"
/>
<!-- ================ TEXTVIEW HASTA ================ -->
<com.app.asaak.textViews.CTextViewName
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="dd/mm/aaaa"
android:id="@+id/informes_text_hasta"
android:textSize="20sp"
android:textAlignment="center"
/>
</LinearLayout>
<!-- VIEWPAGER -->
<android.support.design.widget.TabLayout
android:id="@+id/tabs_informes"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<!-- VIEWPAGER -->
<android.support.v4.view.ViewPager
android:id="@+id/pager_informes"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tabs_informes"
/>
</LinearLayout>
</RelativeLayout>
将linearlayout
外部高度更改为match_parent
。
将TabLayout
高度更改为0dp且权重为1。
将ViewPager
身高更改为match_parent
。
答案 1 :(得分:0)
将Tablayout和viewpager更改为:
<!-- TABLAYOUT -->
<android.support.design.widget.TabLayout
android:id="@+id/tabs_informes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<!-- VIEWPAGER -->
<android.support.v4.view.ViewPager
android:id="@+id/pager_informes"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tabs_informes"
/>
并且每个tab_layout的宽度和高度= match_parent我现在能够看到填充的标签。但是,我仍然遇到问题我无法滚动viewpager的内容,因此我只能看到完整内容的一部分。
答案 2 :(得分:0)
实际上我最终遇到了同样的情况。我得到了一个解决方案。
可以通过扩展ViewPager类来实现。创建一个类
public class WrapContentHeightViewPager extends ViewPager {
/**
* Constructor
*
* @param context the context
*/
public WrapContentHeightViewPager(Context context) {
super(context);
}
/**
* Constructor
*
* @param context the context
* @param attrs the attribute set
*/
public WrapContentHeightViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// find the first child view
View view = getChildAt(0);
if (view != null) {
// measure the first child view with the specified measure spec
view.measure(widthMeasureSpec, heightMeasureSpec);
}
setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view));
}
/**
* Determines the height of this view
*
* @param measureSpec A measureSpec packed into an int
* @param view the base view with already measured height
* @return The height of the view, honoring constraints from measureSpec
*/
private int measureHeight(int measureSpec, View view) {
int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specSize;
} else {
// set the height from the base view if available
if (view != null) {
result = view.getMeasuredHeight();
}
if (specMode == MeasureSpec.AT_MOST) {
result = Math.min(result, specSize);
}
}
return result;
}
}
此类确保视图寻呼机的高度与内部视图相同。
创建类之后,只需使用您创建的自定义视图寻呼机替换布局中的ViewPager。喜欢:
<com.your.packagename.WrapContentHeightViewPager
android:id="@+id/pager_informes"
android:layout_width="match_parent"
android:layout_height="1000dp"
android:layout_below="@id/tabs_informes"
/>
希望这会奏效!
答案 3 :(得分:0)
在尝试建议的解决方案后,我添加了一个Scrollview:
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- VIEWPAGER -->
<com.app.asaak.support.HeightAdaptableViewPager
android:id="@+id/pager_informes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:layout_below="@id/tabs_informes"
/>
</ScrollView>
现在它正在为第一个标签工作,但当我改为第二个标签时(我在其中有这个标签:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<com.jjoe64.graphview.GraphView
android:layout_width="match_parent"
android:layout_height="200dip"
android:id="@+id/grafico_turnos" />
<com.jjoe64.graphview.GraphView
android:layout_width="match_parent"
android:layout_height="200dip"
android:layout_marginTop="10dp"
android:id="@+id/grafico_reservas" />
</LinearLayout>
即使我在其标签上上下滚动,我也看不到它们。看起来图形在某处,但我无法滚动,因为我无法滚动。
另一个奇怪的事情是,即使我在片段中插入边距,当我显示统计边距时,也不会考虑底部边距,因此标签末尾的边距未正确显示。
答案 4 :(得分:0)
事实证明它比我想象的要容易!经过大量尝试并在您的帮助下,我找到了解决方案。只需使用常规viewPager并使height = match_parent。然后在两个选项卡的布局中插入一个高度= wrap_content的Scrollview,就这样,按预期工作!
谢谢你们!