如果是產品製作方向——
由於手機屏幕的限制,和屏幕大小的問題
顯示大量文字,在產品方面,我們一般放棄使用縮小字體類似的方法
一般的做法都是讓文本可以上下滑動來進行閱讀
如果按照上下滑動思路就很簡單了
使用ScrollView,內部嵌套一個TextView就可以了
可以來個簡單範例
============================
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="要顯示的大段文字" />
</LinearLayout>
</ScrollView>
==========================
如果是說編程界面——
如果開發使用ADT可以
在首選項中選擇常規——編輯器——文本編輯器,這里可以任意修改文字大小、顏色等
Ⅱ 怎樣在Android屏幕上循環的輸出一個文字
效果圖:
實現的方法:
在layout中這樣來聲明:
<com.kaixin001.view.ScrollText android:id="@+id/news_statustxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_gravity="center_vertical"
android:textColor="#000000"
android:textSize="16sp"
android:hint="@string/news_state_hint"
android:inputType="text"/>
activity這樣來調用:
private void initStatus(){
ivState = (ImageView) findViewById(R.id.news_statusinput);
//必須使text長度比控制項的寬度大
String s = "dsafsdfsdf(#開心)fsgfdg(#閉嘴)";
newsModel.setStatus(s);
String strModel = newsModel.getStatus();
setStateText(strModel);
}
private void setStateText(String strModel){
if(!TextUtils.isEmpty(strModel)){
tvState.setStateList(newsModel.getStateList());
tvState.setText(strModel);
tvState.init(getWindowManager(), handler);
tvState.startScroll();
tvState.start();
}
}
<pre name="code" class="java"> <span style="white-space:pre"> </span> public void setStatus(String status){
this.status = status;
if(!TextUtils.isEmpty(status)){
stateList = ParseNewsInfoUtil.parseStr(status);
}
<span style="white-space:pre"> </span>}
private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case ScrollText.TEXT_TIMER:if(tvState != null){tvState.scrollText();}break;default:break;}}};
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.WindowManager;
import android.widget.TextView;
import com.kaixin001.item.LinkInfo;
import com.kaixin001.model.StateFaceModel;
public class ScrollText extends TextView {
public static final int TEXT_TIMER = 100;
private float textLength = 0f;// 文本長度
private float viewWidth = 0f;
private float step = 0f;// 文字的橫坐標
private float y = 0f;// 文字的縱坐標
private float temp_view_plus_text_length = 0.0f;// 用於計算的臨時變數
private float temp_view_plus_two_text_length = 0.0f;// 用於計算的臨時變數
private boolean isStarting = false;// 是否開始滾動
private int left = 0;
private int right = 0;
private Paint paint = null;// 繪圖樣式
private String text = "";// 文本內容
private Bitmap txtBmp;
private Canvas txtCanvas;
private FontMetrics fontMetrics;
private Timer timer = new Timer();
private ArrayList<LinkInfo> stateList;
Handler handler;
TimerTask task = new TimerTask() {
public void run() {
if (handler != null && isStarting) {
Message msg = Message.obtain();
msg.what = TEXT_TIMER;
handler.sendMessage(msg);
}
}
};
public ScrollText(Context context) {
super(context);
}
public ScrollText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/** */
/**
* 文本初始化,每次更改文本內容或者文本效果等之後都需要重新初始化一下
*/
public void init(WindowManager windowManager, Handler handler) {
try {
this.handler = handler;
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
paint.setTextSize(getTextSize());
paint.setColor(getCurrentTextColor());
text = getText().toString();
textLength = 0;
// textLength = paint.measureText(text);
int len = stateList.size();
for (int i = 0; i < len; i++) {
LinkInfo info = stateList.get(i);
if (info.isFace()) {// 表情符排版
Bitmap faceBmp = StateFaceModel.getInstance()
.getSmallFaceIcon(info.getContent());
int xLen = faceBmp.getWidth();
textLength += xLen + 4;
continue;
}
String strContent = info.getContent();
float xLen = paint.measureText(strContent);
textLength += xLen;
}
left = this.getPaddingLeft();
right = this.getPaddingRight();
step = textLength;
fontMetrics = paint.getFontMetrics();
y = getPaddingTop();// getTextSize() + getPaddingTop();
txtBmp = null;
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void scrollText() {
if (!isStarting) {
return;
}
invalidate();
if (viewWidth < textLength) {
step += 0.5;
if (step > temp_view_plus_two_text_length) {
step = textLength;
}
}
}
public void setStateList(ArrayList<LinkInfo> stateList) {
this.stateList = stateList;
}
private void setTxtBmp() {
if (txtBmp == null && fontMetrics != null) {
y = -paint.ascent();// fontMetrics.bottom -
// fontMetrics.ascent;//(this.getHeight() -
// (int)fontMetrics.ascent)/2;
viewWidth = getWidth() - left - right;
temp_view_plus_text_length = viewWidth + textLength;
temp_view_plus_two_text_length = viewWidth + textLength * 2;
txtCanvas = new Canvas();
int width = (int) viewWidth;
float height = getHeight();
txtBmp = Bitmap.createBitmap(width, (int) height, Config.ARGB_8888);
txtCanvas.setBitmap(txtBmp);
}
}
/** */
/**
* 開始滾動
*/
public void startScroll() {
isStarting = true;
}
/** */
/**
* 停止滾動
*/
public void stopScroll() {
isStarting = false;
// invalidate();
}
public void start() {
timer.schele(task, 10, 20);
}
public void stop() {
timer.cancel();
}
@Override
public void onDraw(Canvas canvas) {
try {
setTxtBmp();
if (txtBmp == null) {
return;
}
Paint txtPaint = new Paint();
txtPaint.setColor(Color.WHITE);
txtPaint.setStyle(Style.FILL);
txtCanvas.drawRect(0, 0, txtBmp.getWidth(), txtBmp.getHeight(),
txtPaint);
txtPaint.setAntiAlias(true);
txtPaint.setStyle(Style.STROKE);
txtPaint.setTextSize(getTextSize());
txtPaint.setColor(getCurrentTextColor());
float x = 0;
// step為text的寬度
if (viewWidth < textLength) {
x = temp_view_plus_text_length - step;
}
int len = stateList.size();
float curLen = x;
for (int i = 0; i < len; i++) {
LinkInfo info = stateList.get(i);
if (info.isFace()) {// 表情符排版
Bitmap faceBmp = StateFaceModel.getInstance()
.getSmallFaceIcon(info.getContent());
int xLen = faceBmp.getWidth();
txtCanvas.drawBitmap(faceBmp, curLen + 2, 0, txtPaint);
curLen += xLen + 4;
continue;
}
String strContent = info.getContent();
strContent = strContent.replaceAll("
", " ");
float xLen = txtPaint.measureText(strContent);
//因為x的值一直減少,所以文字可以滾動
txtCanvas.drawText(strContent, curLen, y, txtPaint); //<span style="font-family: Arial, Helvetica, sans-serif;">txtCanvas早drawtext.txtBmp上也自然也帶有這些text</span>
curLen += xLen;
}
canvas.drawBitmap(txtBmp, left, 0, paint);
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
txtBmp = null;
setTxtBmp();
}
}
Ⅲ 編程。 安卓編程,點擊按鈕textview顯示文本文字,代碼怎麼寫
這太簡單了,在activity中聲明一個
Button ib_01;
Textview tv_01;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ib_01 = (Button)this.findViewById(R.id.這里寫你按鈕的ID);
tv_01 = (Textview)this.findViewById(R.id.這里寫你textview的ID);
ib_01.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
tv_01.settext("這里寫你想顯示在textview上的字元串");
}
})
如果樓主還是不明白可以找我QQ:959699751
Ⅳ 在android studio中怎樣在控制台列印輸出
android.util.Log常用的方法有以下5個:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根據首字母對應VERBOSE,DEBUG,INFO, WARN,ERROR。
1、Log.v 的調試顏色為黑色的,任何消息都會輸出,這里的v代表verbose啰嗦的意思,平時使用就是Log.v("","");
2、Log.d的輸出顏色是藍色的,僅輸出debug調試的意思,但他會輸出上層的信息,過濾起來可以通過DDMS的Logcat標簽來選擇.
3、Log.i的輸出為綠色,一般提示性的消息information,它不會輸出Log.v和Log.d的信息,但會顯示i、w和e的信息
4、Log.w的意思為橙色,可以看作為warning,一般需要注意優化Android代碼,同時選擇它後還會輸出Log.e的信息。
5、Log.e為紅色,可以想到error錯誤,這里僅顯示紅色的錯誤信息,這些錯誤就需要認真的分析,查看棧的信息了。
Ⅳ 開發Android時,如何實現TextView文字逐個打出的效果
其實這個最笨的實現方法就是弄一個for循環,你要輸出的內容是str
for(int i=1;i<=str.length;i++)
{
textview.setText(str.subString(0,i));
}
當然這回很快!這只是一個思路,你可以啟一個線程,每隔多少毫秒執行一次這個循環的內容