Java 如何在屏幕大小更改时动态管理TextView的位置
我在一个水平布局中有两个文本视图,第一个是普通文本,第二个可以用不同的颜色单击 XMLJava 如何在屏幕大小更改时动态管理TextView的位置,java,android,xml,textview,android-linearlayout,Java,Android,Xml,Textview,Android Linearlayout,我在一个水平布局中有两个文本视图,第一个是普通文本,第二个可以用不同的颜色单击 XML <!--inside rootlayout..--> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" andr
<!--inside rootlayout..-->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="By clicking sign up, you agree to our "
android:textColor="@color/black"
android:textSize="12sp"/>
<TextView
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="terms and conditions"
android:textColor="@color/colorPrimary"
android:textSize="12sp"
android:clickable="true"/>
</LinearLayout>
任用
或
试试autoSizeText
<TextView
.......
android:autoSizeTextType="uniform"
................................../>
以下是关于android开发者的一些信息或者使用
或
试试autoSizeText
<TextView
.......
android:autoSizeTextType="uniform"
................................../>
以下是android developer上的一些内容为了满足您的需求,您不必使用两个文本视图。您可以在一个文本上放置一个spannable字符串生成器,并放置可点击属性和颜色属性,这样您就完成了 代码:
TextView textView = findViewById(R.id.tvSample);
SpannableStringBuilder stringBuilder =new SpannableStringBuilder(textView.getText());
stringBuilder.setSpan(new ForegroundColorSpan(Color.BLUE),textView.getText().length()-20,textView.getText().length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
stringBuilder.setSpan(new ClickableSpan() {
@Override
public void onClick(final View view) {
Toast.makeText(MainActivity.this,"Click",Toast.LENGTH_LONG).show();
}
},textView.getText().length()-20,textView.getText().length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(stringBuilder);
下面是在文本视图上放置不同跨距的示例
如何在单个文本视图上设置两个跨距?根据您的要求,您不必使用两个文本视图。为此,您可以在一个文本上放置一个spannable字符串生成器,并放置“可单击”和“颜色”属性,就可以了 代码:
TextView textView = findViewById(R.id.tvSample);
SpannableStringBuilder stringBuilder =new SpannableStringBuilder(textView.getText());
stringBuilder.setSpan(new ForegroundColorSpan(Color.BLUE),textView.getText().length()-20,textView.getText().length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
stringBuilder.setSpan(new ClickableSpan() {
@Override
public void onClick(final View view) {
Toast.makeText(MainActivity.this,"Click",Toast.LENGTH_LONG).show();
}
},textView.getText().length()-20,textView.getText().length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(stringBuilder);
下面是在文本视图上放置不同跨距的示例
如何在单个文本视图上设置两个跨距您可以使用值文件夹根据屏幕大小设置文本视图字体大小或宽度 您可以使用值文件夹根据屏幕大小设置TextView字体大小或宽度 相同的问题或来源相同的问题或来源 获取设备的高度和宽度,并使用这些值决定是否将屏幕设置为纵向:
if ((height == <value>) && (width == <value>)) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if((高度==)&&(宽度==)){
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
}
*您可以在活动中根据需要随意修改
获取设备的高度和宽度,并使用这些值决定是否将屏幕设置为纵向:
if ((height == <value>) && (width == <value>)) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if((高度==)&&(宽度==)){
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
}
*您可以根据需要在活动中随意修改您可以使用最简单的方法Android Spanable属性来完成此操作。通过这种方式,您可以通过单一文本视图完成这项工作,并可以管理您的点击事件 下面是执行此操作的代码
public void setHighLightedText(TextView textView, String textToHighlight) {
String tvt = textView.getText().toString();
int ofe = tvt.indexOf(textToHighlight, 0);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
// here you do all stuff
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(0xff0000ff);
ds.setUnderlineText(true);
// Here you can put your style on textview.
}
};
SpannableString wordtoSpan = new SpannableString(textView.getText());
for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
ofe = tvt.indexOf(textToHighlight, ofs);
if (ofe == -1)
break;
else {
wordtoSpan.setSpan(clickableSpan, ofe, ofe + textToHighlight.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(wordtoSpan, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
public void setHighLightedText(TextView TextView,String textToHighlight){
字符串tvt=textView.getText().toString();
intofe=tvt.indexOf(textToHighlight,0);
ClickableSpan ClickableSpan=新的ClickableSpan(){
@凌驾
公共void onClick(查看文本视图){
//这是你做的所有事情
}
@凌驾
public void updateDrawState(TextPaint ds){
super.updateDrawState(ds);
ds.setColor(0xff0000ff);
ds.setUnderlineText(true);
//在这里,您可以将您的样式放在textview上。
}
};
SpannableString wordtoSpan=新的SpannableString(textView.getText());
对于(intofs=0;ofs
您可以在其中看到onClick
方法。若将此代码放入实用程序类中,则可以在那个里设置click或UseCallback
奖金
这也是正确的方法。您可以使用最简单的方法来执行此操作。通过这种方式,您可以通过单一文本视图完成这项工作,并可以管理您的点击事件 下面是执行此操作的代码
public void setHighLightedText(TextView textView, String textToHighlight) {
String tvt = textView.getText().toString();
int ofe = tvt.indexOf(textToHighlight, 0);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
// here you do all stuff
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(0xff0000ff);
ds.setUnderlineText(true);
// Here you can put your style on textview.
}
};
SpannableString wordtoSpan = new SpannableString(textView.getText());
for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
ofe = tvt.indexOf(textToHighlight, ofs);
if (ofe == -1)
break;
else {
wordtoSpan.setSpan(clickableSpan, ofe, ofe + textToHighlight.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(wordtoSpan, TextView.BufferType.SPANNABLE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
public void setHighLightedText(TextView TextView,String textToHighlight){
字符串tvt=textView.getText().toString();
intofe=tvt.indexOf(textToHighlight,0);
ClickableSpan ClickableSpan=新的ClickableSpan(){
@凌驾
公共void onClick(查看文本视图){
//这是你做的所有事情
}
@凌驾
public void updateDrawState(TextPaint ds){
super.updateDrawState(ds);
ds.setColor(0xff0000ff);
ds.setUnderlineText(true);
//在这里,您可以将您的样式放在textview上。
}
};
SpannableString wordtoSpan=新的SpannableString(textView.getText());
对于(intofs=0;ofs
您可以在其中看到onClick
方法。若将此代码放入实用程序类中,则可以在那个里设置click或UseCallback
奖金
这也是正确的方法。我认为这是自动发生的。。。这取决于空间,若它有足够的空间,那个么它将像第一个屏幕一样,我认为它会自动发生。。。它取决于空间,如果它有足够的空间,那么它将像第一个屏幕一样。为什么
ForegroundColorSpan
不会改变?我使用了res文件中的一种颜色,但它总是显示蓝色?下面是代码int color=getResources().getColor(R.color.colorPrimary);ForegroundColorSpan fcs=新的ForegroundColorSpan(颜色);stringBuilder.setSpan(fcs,termsTxt.getText().length()-20,termsTxt.getText().length(),SPAN.SPAN_EXCLUSIVE_EXCLUSIVE)
int color=ContextCompat.getColor(context,R.color.your_color);还是一样。。!我在更新1中发布了完整的代码。请看一看。为什么前景颜色span
不会改变?我用了一种来自我的re的颜色