Приложение для Android: текст обрезается на устройствах меньшего размера

#android #image #crop

#Android #изображение #обрезка

Вопрос:

Мы разрабатываем приложение для Android. Текст правильно отображается на 5-дюймовых устройствах. Но обрезается на устройствах меньшего размера (4 «, 3.5 «). почему это происходит? Приветствуется любая помощь. Пожалуйста, смотрите скриншоты ниже. «Кредит», «дебет» и «Нетто» отображаются вместо «Кредитной карты», «дебетовой карты» и «Сетевого банкинга» на скриншоте ниже.

на устройствах большего размера

на устройствах меньшего размера

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#ffffff" >
    <include android:layout_width="match_parent"
              android:layout_height="wrap_content"
              layout="@layout/sdk_header"
              />

 <RelativeLayout 
     android:id="@ id/topLogoLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"
      android:layout_marginTop="0dp" 
      android:layout_marginRight="0dp" 
      android:layout_marginLeft="0dp" 
      android:layout_marginBottom="-11dp" 
      android:background="#e5e5e5" 
      android:paddingTop="10dp" 
      android:paddingBottom="20dp">

  <TextView 
      android:id="@ id/youtxt" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:gravity="right" 
      android:layout_marginTop="5dp"
      android:text="You"
 android:textSize="40sp" 
 android:textColor="#727272" 
 android:layout_marginLeft="10dp" /> 

 <RelativeLayout 
     android:id="@ id/arrowLayout" 
     android:layout_toRightOf="@ id/youtxt"
     android:layout_toLeftOf="@ id/companyLogo"
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"
     android:layout_marginTop="5dp"
     android:layout_centerHorizontal="true">

  <TextView 
      android:id="@ id/txt_amount" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="Rs. 10" 
      android:textColor="#727272" 
      android:textSize="18sp" /> 

   <ImageView 
      android:id="@ id/arrow" 
      android:layout_width="wrap_content" 
      android:layout_height="18dp" 
      android:src="@drawable/arrow" 
      android:layout_below="@ id/txt_amount" /> 

  </RelativeLayout>

  <ImageView 
      android:id="@ id/companyLogo" 
      android:layout_marginTop="5dp" 
      android:layout_marginRight="30dp" 
      android:layout_width="70dp" 
      android:layout_height="50dp" 
      android:layout_alignParentRight="true" 
      android:src="@drawable/wallet_logo" 
      android:scaleType="fitXY" /> 
  </RelativeLayout>

  <ImageView 
      android:id="@ id/orange_line"  
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:src="@drawable/orange_line" 
      /> 
  <com.viewpagerindicator.TabPageIndicator 
      android:layout_marginTop="0dp"
      android:id="@ id/indicator" android:layout_height="wrap_content" android:layout_width="fill_parent" /> 
  <android.support.v4.view.ViewPager android:id="@ id/pager" android:layout_width="wrap_content" android:layout_height="wrap_content" >



  </android.support.v4.view.ViewPager> 

</LinearLayout>
  

Комментарии:

1. Показывает XML-код и относительный Java-код. Попробуйте установить для singleLine значение false для textviews, если это поможет.

2. Возможно, вы настраиваете текстовые представления с помощью полей. Так что лучше используйте weight.

3. Чего вы ожидаете, когда на экране недостаточно места для отображения полного текста?

4. пожалуйста, покажите свой XML-код и Java-код в вашем вопросе.

Ответ №1:

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

Кажется, что ваши шрифты слишком большие на маленьком экране. Это влияет на то, что кажется вкладками и кнопками, хотя у EditText тоже есть проблема (он просто не переполняется).

Полезным способом измерения размера экрана является sw-dp (пиксель наименьшей ширины, не зависящий от устройства). Плотность dp отрегулирована таким образом, чтобы она составляла около 160 точек на дюйм на всех устройствах. Для 5-дюймового планшета, ширина которого будет около 3 дюймов, это должно быть устройство sw480dp. Экран 3 «-3,5″ имеет ширину около 2 » и должен быть устройством с поддержкой sw320dp.

Чтобы это работало на самом простом уровне, вам нужно установить в вашей value-sw240dp папке некоторые настройки размера текста, которые составляют примерно 3/4 размера текста для вашего устройства sw480dp по умолчанию.

Например, это может появиться в вашем dimen файле в этой папке.

 <dimen name="view_field_text_size">14sp</dimen>
  

Я не могу дать вам кулинарную книгу, потому что у меня нет информации о том, как вы используете другие стили или размеры. Возможно, в макете, который у вас может быть:

 <EditText
   <android:textSize="@dimen/view_field_text_size"
/>
  

Лучше оформить его в стиле, но здесь это выходит за рамки.

Ответ №2:

Разные устройства могут иметь разную плотность пикселей, размер экрана, ориентацию, разрешение и пиксель, не зависящий от плотности (dp).

Решение

  • Определите разные файлы макета для разных размеров экрана.
  • Убедитесь, что размер вашего макета может быть соответствующим размеру экрана
  • Предоставление соответствующего макета пользовательского интерфейса в соответствии с конфигурацией экрана
  • Обеспечение правильного расположения на правильном экране

По умолчанию Android изменяет размер макета вашего приложения в соответствии с текущим экраном устройства. В большинстве случаев это работает нормально. В других случаях ваш пользовательский интерфейс может выглядеть не так хорошо и может потребоваться корректировка для разных размеров экрана. Например, на большом экране вы можете захотеть изменить положение и размер некоторых элементов, чтобы воспользоваться дополнительным пространством экрана, или на меньшем экране вам может потребоваться настроить размеры, чтобы все могло поместиться на экране.

Для предоставления ресурсов определенного размера можно использовать следующие параметры конфигурации: small, normal, large и xlarge. Например, макеты для очень большого экрана должны отображаться в layout-xlarge / .

Начиная с Android 3.2 (уровень API 13), вышеуказанные группы размеров не рекомендуются, и вместо этого вам следует использовать квалификатор конфигурации swdp для определения наименьшей доступной ширины, требуемой вашими ресурсами макета. Например, если для макета вашего планшета с несколькими панелями требуется ширина экрана не менее 600dp, вы должны поместить его в layout-sw600dp / . Использование новых методов для объявления ресурсов макета обсуждается далее в разделе об объявлении макетов планшета для Android 3.2.

Посмотрите — Поддержка нескольких экранов и Поддержка обучающих документов для экрана.

Ответ №3:

вам просто нужно создать разные папки, связанные с плотностью или размером экрана, например

Вариант 1.

 values-large
values-small
values-normal
  

Для получения дополнительных пояснений проверьте эту ссылку…

Поддержка нескольких экранов

Вариант 2.

 mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
  

это даст размер текста в зависимости от плотности..

Комментарии:

1. Вариант 2: какое отношение плотность имеет к размеру экрана?

2. getResources().getDisplayMetrics().плотность устройства

3. Да, но у вас могут быть маленькие экраны с высокой плотностью и большие экраны с низкой плотностью. Ваш вариант 2 увеличит размер текста на маленьком экране.