我一直在寻找一种在textview中自动调整文本的方法.通过我的搜索,我找到了许多解决方案,如:
但和许多其他人一样,这些并不能解决我的问题.当我们使用带有多行的TextView时,它们无法按预期工作.
基本上我的目标是这个:

如您所见,文本根据宽度,高度调整大小,并注意换行,创建多行文本视图.也可以改变字体.
我解决这个问题的一个想法是这样的:
int size = CONSTANT_MAX_SIZE;
TextView tv = (TextView) findViewById(R.id.textview1)
while(Math.abs(tv.getMeasuredHeight()) >= TEXTVIEW_MAX_HEIGHT) {
size--;
tv.setTextSize(size);
tv.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);
i++;
}
Run Code Online (Sandbox Code Playgroud)
CONSTANT_MAX_SIZE是一个常量,用于定义字体的最大大小(TextView中的textsize礼节)
TEXTVIEW_MAX_HEIGHT是一个常量,用于定义textview可以具有的最大大小.
每次textview中的文本发生更改时都会调用此方法.
textview xml是这样的:
<TextView
android:id="@+id/textview1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:singleLine="false"
android:inputType="textMultiLine"
android:text=""
android:textSize="150sp" />
Run Code Online (Sandbox Code Playgroud)
由于宽度在XML中受到限制,因此只需要考虑视图的高度,因为调整它后android会在需要时自动创建多行.
虽然这是一个潜在的解决方案并不完美(远离它)并且它不支持调整大小(当您删除文本时).
任何sugestions和/或想法?
我WebView用来证明文本的合理性.我想知道-
是否可以在layout文件中设置文本大小?因为我想要不同的屏幕尺寸不同的文字大小.
并且还有一个问题是在2秒文本显示之后首先出现背景.是否可以立即显示文字?
文字大小为7-8行.
码-
public class Main extends Activity {
WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
String text = "<html><body>"+"<p align=\"justify\">"+getString(R.string.itext)+"</p>"+"</body></html>";
mWebView .loadData(text, "text/html", "utf-8");
mWebView .setBackgroundColor(Color.TRANSPARENT);
}
}
Run Code Online (Sandbox Code Playgroud)
XML的
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/light">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 如何更改材质按钮的字体大小...有更好的方法吗?
new MaterialButton(
height: 140.0,
minWidth: double.infinity,
color: Theme.of(context).primaryColor,
textColor: Colors.white,
child: new Text("material button"),
onPressed: () => {},
splashColor: Colors.redAccent,
),
Run Code Online (Sandbox Code Playgroud) 所以我使用Paint的measureText()方法来测量一段文本的宽度,但我想根据特定的文本大小来测量文本.假设我想要获得文本片段的宽度,当它占用某个TextView时,它将是20个像素的像素.我尝试了以下方法:
Paint paint = new Paint();
paint.setTextSize(20);
paint.measureText("sample text");
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有起作用.我相信它会返回相对于较小文本大小的宽度.我觉得我错过的东西会让我在脸上拍打自己,然后大喊大叫.
我试图在全球范围内设置文本大小,无法找到或找到一种方法.
例如,我有这样的事情:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id = "@+id/Table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:shrinkColumns="*"
android:stretchColumns="*">
</TableLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
TableRows和TextViews本身是根据用户输入动态生成的.
问题是我想基于资源文件全局设置基本textSize,而不必去触及一堆代码.有没有办法告诉应用程序,"嘿应用程序,使用它作为所有textViews的基本textSize?"
或者用另一种方式表达,在HTML中我可以在body,div和table级别设置字体大小.我可以在布局(LinearLayout,TableLayout,ScrollView等)级别上做类似的事情吗?
经过一番努力,我终于到达了我在android中的第一个应用程序的结尾.并感谢所有人.但是在结束之后,我意识到我的应用文本大小在所有平板电脑尺寸中都很常见.所以我将重新提出我的问题.
问题:我在整个应用中使用了自己的自定义文字大小.还有一些满意的7英寸平板电脑.但是,当我在8.9英寸和10.1英寸平板电脑上看同样的东西时,它包含大量的空白区域和文字大小也相对较小.那么有什么方法可以根据我的平板电脑大小改变文字大小??? 它可能看起来像新手问题,但我正在努力解决这个问题,因为相同的应用程序在7英寸看起来很精彩,在8.9和10.1英寸中失去了它的本质.或者我可以用我的应用程序做同样的事情. 可能的解决方案: -正如我的主题所示,当平板电脑大小发生变化时,有一些方法可以更改文本大小.动态或任何其他方式.
编辑::根据Cheeta的回答,方法是正确的但我无法为每个布局按钮和文本字段和其他字段执行此操作.在单个应用程序中有数百个这样的字段.我可以在某个地方进行,并将其称为必需属性.自定义标签是我正在寻找的方法.是否可能????
任何帮助将不胜感激.提前致谢.
注意我还没有达成答案,但猎豹的答案在某种程度上导致了正确的方法.我将他的答案标记为正确,尽管他的答案几乎没有对齐问题.任何其他答案总是受欢迎的.谢谢
在iOS 5上.
我有一个最初放在笔尖中的UILabel元素.我希望x位置保持不变.我希望它采用1行或2行.如果超过两行,则应使用换行符设置来显示省略号.
我用numberOfLines属性和-sizeToFit
如果我将UILabel的numberOfLines属性设置为0,它将正确地看到对于某些文本,没有足够的空间并且在调用之后将其包装到第二行-sizeToFit但是在极少数情况下该行足够长以拉伸到3行,我得到三行,我不想要.如果我将numberOfLines属性设置为2,它实际上将整个东西拉伸到一条线上,并将我在笔尖中设置的初始框架拉长得更宽.
CGRect titleFrame = [[self titleLabel] frame];
[[self titleLabel] setNumberOfLines:0];
[[self titleLabel] setText:newProductTitleText];
[[self titleLabel] sizeToFit];
CGRect newTitleFrame = [[self titleLabel] frame];
Run Code Online (Sandbox Code Playgroud)
CGRect就在那里,我可以在事后计算出事物.因此设置numberOfLines为0有效,并且不会更改框架中的原始origin.x,并且会将长文本分成多行,但不会将其约束为2行.将numberOfLines属性设置为2,当我阅读Apple文档时
此属性控制使用的最大行数,以使标签的文本适合其边界矩形.此属性的默认值为1.要删除任何最大限制,并根据需要使用尽可能多的行,请将此属性的值设置为0.
似乎我应该能够将其设置为两个并仍然有效.我希望sizeToFit在扩展以适应所有文本时在正X和Y方向上扩展,但是当numberOfLines设置为0以外时它在负X方向上扩展.
ETA:"自动调整大小"的struts设置为上部和左侧以将其固定在最小x,y.
感谢您的任何见解.
在RemoteViewsService.RemoteViewsFactory下
public RemoteViews getViewAt(int position) {
final int itemId = (position % 2 == 0 ? R.layout.light_widget_item
: R.layout.dark_widget_item);
RemoteViews rv = new RemoteViews(mContext.getPackageName(), itemId);
rv.setTextViewText(R.id.widget_item, text);
// rv.setTextSize(mPrefs.getTextsize().getValue());
return rv;
}
Run Code Online (Sandbox Code Playgroud)
如何以编程方式更改文本大小?
简单的问题:我想知道EditText的默认文本大小是什么.有人知道吗?
我需要你的帮助。
现在我使用 AsciiDoc 和 AsciiDoctor 来创建一些手册。
我希望某些特定块上的文本更小,例如宽表、宽列表等,但不希望主文本更小。尤其是我需要根据客户的要求将宽表的文本缩小。
有什么办法吗?