2013-04-15 2 views
0

Итак, по моим особым причинам, я должен убедиться, что размер String (размещенный в текстовом формате) (в пикселях) не превышает размер ширины устройства (в пикселях). Для того, чтобы получить ширину экрана я использую:Как сравнить размер экрана экрана с размером строки?

final float scale = context.getResources().getDisplayMetrics().density; 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    try{ 
     Point size = new Point(); 
     display.getSize(size); 
     screenWidth = size.x; 
    }catch(NoSuchMethodError e){ 
     screenWidth = display.getWidth(); 
    } 
    screenWidth = screenWidth - ((int) (10 * scale + 0.5f)); //takes into account a 10dp margin 

А чтобы получить длину строки, я использую:

paint.measureText(string); 

Где строка является String объект и краска представляет собой Paint объект. Проблема, с которой я столкнулся: Метод measureText говорит, что String меньше, чем длина экрана, даже если он намного длиннее. Я что-то упустил? Есть ли лучший подход к этому? Любая помощь, предложения или советы будут очень признательны! Благодаря!

+0

Чтобы вычислить ширину символа, вам необходимо знать размер символа. И это зависит от немонопольных шрифтов. –

+0

Итак, была бы формула просто (размер символов) * (размер строки)? Где (размер символов) должен, вероятно, равняться наибольшему размеру символа (M) и (размер строки), будет равен методу 'paint.measureText'? И еще мой вопрос: каким образом 'paint.measureText()' вычисляет размер без ссылки на размер символа? – chRyNaN

+0

Нет, вам нужно перечислить символ _each_ и вычислить его размер. Затем добавьте их все вместе. –

ответ

0

Ответ на мою проблему нелегко понять с кодом, который я предоставил. Для кода, который я предоставил, было правильно. Проблема заключалась в том, я создал Paint объект следующим образом:

Paint paint = new Paint(); 

И тогда я ссылаюсь методом measureText(string). Проблема в том, что он не учитывает размер текста, который я дал этому подклассу TextView. Итак, для того, чтобы решить эту проблему, все, что я должен был сделать, чтобы изменить код выше для:

Paint paint = this.getPaint(); 
0

Я обычно использую:

paint.getTextBounds 

для такого рода ситуации и нашел его очень точный.

Я также обнаружил, что переопределение onSizeChanged в пользовательской версии TextView (оставив все остальное то же самое) означает, что я получаю прямое исправление размера представления, когда оно мне нужно.

Смежные вопросы