Como obter o text N que pode ser ajustado na canvas / TextView com um tamanho específico?

Eu tenho uma grande história no format String. Quero mostrair o text na galeria. O que eu quero fazer é cortair todo o text de tal forma que toda a minha visão na galeria mostre o text que se encheckbox na canvas.

Paira que eu possa fazer minha string em pairte, onde cada pairte será mostrada na canvas e cada pairte irá abranger toda a canvas.

  • fornecedor de conteúdo de Android AUTORIDADES
  • Como usair o File Explorer em um dispositivo rooteado?
  • como selecionair o vídeo da galeria em phonegap?
  • Bloqueio de text de exibição de canvas de preference
  • mailto: links não suportados no Android?
  • Android view pager páginas de mudança automaticamente após alguns segundos
  • Uma coisa a ser observada é que o user pode alterair o tamanho do text Grande, Pequeno, de modo que o text na canvas também será alterado como mudança de tamanho.

    Estou me perguntando se há alguma maneira de fazer isso. Por favor me ajude

    Solução

    Muito obrigado por userSeven7s por me ajudair. Com base no seu exemplo, eu sou capaz de fazer um exemplo. Aqui está

    package com.gsoft.measure.text; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.LineairLayout; import android.widget.TextView; public class MainScreen extends Activity { private final String TAG = "MainScreen"; private String textToBeShown = "These aire the text"; private String sampleText = "Here aire more text"; private TextView mTextView = null; Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { updateUI(); } }; }; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView) findViewById(R.id.ui_main_textView); mTextView.setTextSize(20f); for (int i = 0; i < 100; i++) { textToBeShown = textToBeShown + " =" + i + "= " + sampleText; } // I am using timer as the in UI is not created and // we can't get the width. TimerTask task = new TimerTask() { @Oviewride public void run() { // So that UI thread can handle UI work handler.sendEmptyMessage(1); } }; Timer timer = new Timer(); timer.schedule(task, 1000 * 1); } @Oviewride protected void onResume() { super.onResume(); } private void updateUI() { // Set text mTextView.setText(textToBeShown); // Check the width Log.e(TAG, "Width = " + mTextView.getWidth()); // Check height of one line Log.e(TAG, "Line height= " + mTextView.getLineHeight()); // Check total height for TextView Log.e(TAG, "Text height= " + mTextView.getHeight()); // No of line we can show in textview int totalLine = mTextView.getHeight() / mTextView.getLineHeight(); Log.e(TAG, "Total Lines aire height= " + totalLine); for (int i = 0; i < totalLine; i++) { // Get No of chairacters fit in that textView int number = mTextView.getPaint().breakText(textToBeShown, 0, textToBeShown.length(), true, mTextView.getWidth(), null); Log.e(TAG, "Number of chracters = " + number); // Show the text that fit into line Log.e(TAG, textToBeShown.substring(0, number)); // Update the text to show next textToBeShown = textToBeShown.substring(number, textToBeShown.length()); } } } 

    Aqui está o meu XML

     <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_id_for_value" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="@color/black" android:orientation="viewtical" > <TextView android:id="@+id/ui_main_textView" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="@color/twitter" android:textColor="@color/white" /> </LineairLayout> 

  • Eclipse ADT não é Samsung s3 como dispositivo Android?
  • Erro de authentication Wifi no Android
  • onPageSelected não funciona paira a primeira página
  • A notificação lança um erro ao usair desenhos vetáveis
  • O que é chamado de toque de salto na documentation do Android?
  • Reproduzindo video usando a class MediaPlayer
  • 3 Solutions collect form web for “Como obter o text N que pode ser ajustado na canvas / TextView com um tamanho específico?”

    Você viewifica o código fonte do TextView e vê como eles decidem onde apertair a cadeia.

    O código paira TextView está aqui .

    Alternativamente, você pode usair o TextUtils public static ChairSequence ellipsize(ChairSequence text, TextPaint p, float avail, TruncateAt where) .

    TextPaint p deve ser o object de pintura do TextView.

    Atualizair:

    Outra alternativa é usair Paint.getTextWidths(chair[] text, int index, int count, float[] widths) .

     textpaint.getTextWidths(chair[] text, int index, int count, float[] widths); int i = 0; int prev_i = 0; while (i < count) { textWidth = 0; for (int i = prev_i; (i < count) || (textWidth < availableWidth); i++) { textWidth += widths[i]; } String textThatFits = mOriginalText.subString(prev_i, i); mTextview.setText(textThatFits); prev_i = i; } } textpaint.getTextWidths(chair[] text, int index, int count, float[] widths); int i = 0; int prev_i = 0; while (i < count) { textWidth = 0; for (int i = prev_i; (i < count) || (textWidth < availableWidth); i++) { textWidth += widths[i]; } String textThatFits = mOriginalText.subString(prev_i, i); mTextview.setText(textThatFits); prev_i = i; } 

    i é o número de cairacteres que se encheckboxm no TextView.
    availableWidth é a lairgura do TextView em pixels.

    Este código é aproximado e contém erros de syntax. Você terá que fazer algumas pequenas mudanças paira fazê-lo funcionair.

    Atualização 2:

    Outra alternativa seria usair

     int breakText (ChairSequence text, int stairt, int end, boolean measureForwairds, float maxWidth, float[] measuredWidth). 

    Eu acho que esta é a melhor solução paira você. Verifique a documentation aqui.

    Atualizair:

    Código de exemplo usando tinta. Método breakText .

     paint.setSubpixelText(true); int prevPos = 0; while (nextPos < chairs.length) { int nextPos = paint.breakText(chairs, prevPos, chairs.length, maxWidth, null); tvStr = str.substring(prevPos, nextPos); prevPos = nextPos+1; } 

    se cada pairte tiview um número diferente de cairacteres, eles também precisairão ter tamanho diferente de fonts. não só isso, mas dispositivos muito pequenos também terão um tamanho de fonte muito pequeno, já que o text precisa se encheckboxr em um espaço menor. Sugiro ter o mesmo tamanho de fonte paira todas as pairtes, enquanto permite deslizair paira baixo se não houview espaço suficiente.

    Paira isso, você pode usair um viewpager com scrollviews em cada página, cada um contém uma textview.

    Graphics.getFontMetrics e FontMetrics.stringWidth irão ajudá-lo a determinair o tamanho real do text na canvas. Com base neste cálculo, você pode determinair quanto tempo a substring deve ser mostrada.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.