TextView在一些解决scheme中得到削减

我有一个RecyclerView ,其中包含有一个TextView和一个ImageView ,以及其他一些布局的CardView
问题是,在某些屏幕分辨率的TextView被切断或推到下一行,我不想要的。
在其他解决scheme中, TextView有足够的空间。

小决议:
小

高分辨率:
在这里输入图像说明

如何组织布局以便TextView有足够的空间,并且ImageView大小将相应调整?

这是我的RecyclerView项目的XML:

 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cardview="http://schemas.android.com/apk/res-auto" android:id="@+id/zmanCard" android:layout_width="match_parent" android:layout_height="50dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" cardview:cardUseCompatPadding="false" cardview:cardPreventCornerOverlap="false" cardview:cardCornerRadius="4dp" cardview:cardElevation="2dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimary" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="20dp" android:layout_gravity="top" android:gravity="center" android:orientation="vertical" android:background="?attr/colorPrimaryDark"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/zmanCardTitle" android:textColor="#ffffff" android:gravity="center" android:textSize="13sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="24dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:layout_marginLeft="2dp" android:layout_marginRight="4dp" android:alpha="0.8" android:id="@+id/zmanCardImage" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="7dp" android:layout_marginLeft="0dp" android:layout_marginRight="4dp"> <TextView android:text="5:40" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:id="@+id/zmanCardTime" android:textColor="#ffffff" android:textSize="18sp" /> <ProgressBar android:id="@+id/zmanProgressBar" android:layout_width="24dp" android:layout_height="24dp" android:layout_gravity="top|left" style="@style/Base.Widget.AppCompat.ProgressBar" /> </FrameLayout> </LinearLayout> </LinearLayout> 

尝试这个。 工程100%。

AutoResizeTextView或sdp单位可以帮助你。

SDP – 一个可扩展的大小单位

提供新尺寸单位的android SDK – sdp可缩放dp )。 这个尺寸单位与屏幕尺寸成比例。 它可以帮助Android开发者支持多个屏幕。

对于文本视图请参考基于SP大小单位的文本。

https://github.com/intuit/sdp

自动缩放TextView文本以适合边界

如果你想支持不同屏幕的不同的布局devise:

 res/layout/my_layout.xml // layout for normal screen size ("default") res/layout-small/my_layout.xml // layout for small screen size res/layout-large/my_layout.xml // layout for large screen size res/layout-xlarge/my_layout.xml // layout for extra large screen size res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation 

更多信息请看这里

在这里输入图像说明

一个TextView 自动调整文本的大小,使其完全符合其范围

用法:

 dependencies { compile 'me.grantland:autofittextview:0.2.+' } 

在代码中启用任何视图扩展TextView:

 AutofitHelper.create(textView); 

启用任何视图在XML中扩展TextView:

 <me.grantland.widget.AutofitLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" /> </me.grantland.widget.AutofitLayout> 

在代码或XML中使用内置的Widget:

 <RootElement xmlns:autofit="http://schemas.android.com/apk/res-auto" ... <me.grantland.widget.AutofitTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:maxLines="2" android:textSize="40sp" autofit:minTextSize="16sp" /> 

参考链接: https : //github.com/grantland/android-autofittextview

我可以为您的文本大小build议两步解决scheme之一,所以wrap_content属性适合文本,我build议使用限定符来提供多个替代布局来定位不同的屏幕configuration。 您可以通过使用configuration限定符(允许运行时自动根据当前设备的configuration(例如针对不同屏幕尺寸的不同布局devise)select适当的资源)来执行此操作。 支持不同的屏幕尺寸

从这个部分到最后,我从@ Herry的回答中复制了这个链接的答案:我认为你需要检查这个Google IO Pdf for Design 。 在这个pdf中,转到第77页 ,其中您将会看到如何为dimens.xml的不同设备使用dimens.xml提示,例如参见下面的结构:

RES /值/ dimens.xml

RES /值小/ dimens.xml

RES /值正常/ dimens.xml

RES /值-大/ dimens.xml

RES /值-XLARGE / dimens.xml

例如,您在值中使用了以下的dimens.xml。

 <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="text_size">18sp</dimen> </resources> 

在其他值文件夹中,您需要更改文本大小的值。

例如:

 <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="font_size_small">10sp</dimen> <dimen name="font_size_medium">20sp</dimen> <dimen name="font_size_large">30sp</dimen> </resources> 

如果你想要可缩放的屏幕,你不应该使用固定的高度或宽度。 在你的情况,你应该把你的组件与layout_weight成比例。

更多细节;

android:layout_weight是什么意思?

为了更简单的方式创build你的布局使用相对布局与一些适当的技术,确保它会解决。 如果仍然存在问题,请向我提供.xml文件

你应该使用填充,使textview总是有一些固定的填充,它永远不会被剪切。 在你的代码中进行以下更改

  <TextView android:text="5:40" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:id="@+id/zmanCardTime" android:textColor="#ffffff" android:padding:"3dp" android:textSize="18sp" /> 

在这里,你再次用关键词去

parsing度

你现在有什么select?

  • 支持多个屏幕

    1多种布局2.多维度

  • 在这个特定问题上的着名答案(自动缩放文本视图文本以适合边界)

  • Weight_sum属性的用法
  • AutoFitTextViewSDP的 GitHub库

刚刚总结了这些答案(一体机)! 还有其他的select吗?

我可以看到你的问题是与两个手拉手的情况下绑定。

  1. 当然你的文字不会resize2.你的布局太灵活了。

    在这里输入图像说明

有时候看到TextView本身就掉下去了。还有其他的select,你可以试着避免这个,而不是你的解决scheme?

PercentRelativeLayout

这有什么额外的好处? 是的,这支持基于百分比的尺寸和边距,你已经设置了固定的边距,这会给你他们使用百分比。它甚至有一个很酷的属性,称为layout_aspectRatio 。 这是一个小教程的链接。

根据视图的比例/绝对位置给出尺寸

PercentRelativeLayout之前,我主要使用这个。首先你需要有一个你的视图的模型图像/草图。 我的机型是1920像素高,1080宽(通常是HDTV分辨率,16:9宽高比)

在这个图像中,我们知道视图的位置。

在这里输入图像说明

那么对于任何视图/任何其他屏幕,我可以使用相同的比例来使用LayoutParams来定位它们。 现在根据你的规则查看保留。

这里是一个例子:

 DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); height = displaymetrics.heightPixels; width = displaymetrics.widthPixels; LinearLayout.LayoutParams topLenP= new LinearLayout.LayoutParams(300 * width / 1080, 400 * width / 1920); //topLenP.topMargin = x* height / 1920; //topLenP.leftMargin = y* width / 1080; myView.setLayoutParams(topLenP); 

实际上我在这里做了什么,就像我在模型视图中所说的那样,这个视图占用了300宽度,高度为400,我正在调整我的葡萄干屏幕的相同比例(使用无限大的屏幕尺寸)。

回到自动缩放比例,因为现在我们有一个相同的比例为基础的看法是另一个很好的答案。

自动适应Android的TextView

机器人:textAppearance

最后在android \platforms\android-X\data\res\values\themes.xml基于小,大和中的固定大小。

没有指定你确实需要什么,你也可以使用它

 <TextView android:textAppearance="?android:attr/textAppearance" .... /> 

希望这可以帮助!

尝试给文本视图布局和图像视图布局的权重给这两个布局的权重1

使用AutoScaleTextView

AutoScaleTextView采用android:textSize值并将其用作首选文本大小。 您还可以设置最小文字大小。 最小文本大小的默认值是10dpAutoScaleTextView现在试图在适合视图宽度的首选和最小大小之间取最大值(关于填充)。

请在下面的LINK中find完整的AutoScaleTextView类及其实现

http://ankri.de/autoscale-textview/

解决scheme1

https://developer.android.com/guide/practices/screens_support.html

 // The TEXT SIZE in dp private static final float TEXT_SIZE_DP = 16.0f; // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale int textSize = (int) (TEXT_SIZE_DP * scale + 0.5f); textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize); 

解决scheme2:

 float dpi = getResources().getDisplayMetrics().widthPixels; dpi = dpi / 320; textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,TEXT_SIZE_DP*dpi); 

其工作如何参考下面的链接

http://canvasonandroid.blogspot.in/2016/04/how-to-scale-font-size-for-different.html

注意:只能在设备上使用,而不能在平板电脑上使用。 我们需要为平板电脑编写不同的逻辑。 为此,您需要在dimen.xml中设置字体大小

我想你不应该修复GridLayoutspanCount 。 如果high resolutions你会显示4项,对于small resolutions显示3项, landscape display 5项,… –

要做到这一点,你应该创build一个你将支持的所有值文件夹的constants

 res/values-small/dimens.xml constants.xml res/values-large/dimens.xml constants.xml 

对于每个constants.xml ,它会看起来像

 <resources> <integer name="span_count">3</integer> </resources> 

然后当你创buildGridLayoutManager

 GridLayoutManager lm = new GridLayoutManager(Context context, getContext().getResources().getInteger(R.integer.span_count)); 

当你这样做后,你的问题就不会发生

我在android的经验我总是使用dp而不是sp,所以你修复所有textview的dp值,并将适合anyscreen。

让我知道如果有任何问题。

最好的Regds