2016-09-07 2 views
0

Когда программно создание EditText через его конструкторами EditText (контекст Context), он создает один со старым андроида конструкций:Как программно создать материальный дизайн EditText?

enter image description here

Это не позволяет для выбора текста, (но я могу переместите курсор). Как сделать EditText с новыми конструкциями, например, так:

enter image description here

Я уже нашел, как удалить оранжевую границу (т.е. с setBackgroundColor), но я не могу найти способ, как изменить курсор дизайн и , как сделать возможным выбрать текст (т.е. я хочу видеть левую и правую кнопку выбора текста). Мне нужно сделать все это программно, потому что я создаю EditText на лету в Delphi (так что нет xml).


В соответствии с поручением это AndroidManifest.xml, который идет с моим приложением:

<?xml version="1.0" encoding="utf-8"?> 
<!-- BEGIN_INCLUDE(manifest) --> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.myapp.app" 
     android:versionCode="1" 
     android:versionName="1.0.0" 
     android:installLocation="preferExternal"> 

    <!-- This is the platform API where NativeActivity was introduced. --> 
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature android:glEsVersion="0x00020000" android:required="True"/> 
    <application android:persistent="False" 
     android:restoreAnyVersion="False" 
     android:label="myapp" 
     android:debuggable="True" 
     android:largeHeap="False" 
     android:icon="@drawable/ic_launcher" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:hardwareAccelerated="true"> 



     <!-- Our activity is a subclass of the built-in NativeActivity framework class. 
      This will take care of integrating with our NDK code. --> 
     <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" 
       android:label="myapp" 
       android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 
       android:launchMode="singleTask"> 
      <!-- Tell NativeActivity the name of our .so --> 
      <meta-data android:name="android.app.lib_name" 
       android:value="myapp" /> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" /> 

    </application> 
</manifest> 
<!-- END_INCLUDE(manifest) --> 
+0

Большую часть времени стиль виджетов унаследована от темы в прикладной тег в AndroidManifest. Можете ли вы опубликовать файл AndroidManifest.xml? – jakubbialkowski

+0

Итак, вы хотите, чтобы пользовательский курсор, как черный курсор, зеленый курсор. Если я не ошибаюсь – Bhavnik

+0

@jakubbialkowski, я просто разместил содержимое своего AndroidManifest.xml. Но это не только дизайн, прямо сейчас я даже не могу выбрать текст в своем edittext :( – loki

ответ

0

Что вы хотите сделать, это создать EditText XML в папке макета, вы можете повторно использовать, и вы можете укажите стиль в этом.

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
style="SUPPLY YOUR STYLE HERE FROM STYLES.XML" /> 

Вы также можете сообщить об этом для использования темы. Затем вы раздувать это так:

EditText myEditText = (EditText)getLayoutInflater().inflate(R.layout.SOME_LAYOUT, null); 

Для того, чтобы ваш текст Выбирается, вы можете попробовать это:

editText.setTextIsSelectable(true);

+0

спасибо VicVu, но как это будет работать, если прямо сейчас я не могу даже выбрать какой-либо текст (я вижу только селектор дескриптора среднего текста, но не левым или правым дескриптором дескриптора текста)? также я бы хотел избежать использования каких-либо XML – loki

+0

См. мои правки, пожалуйста. – VicVu

+0

благодарит vicVU за вашу поддержку, но, к сожалению, setTextIsSelectable не помог, я все еще не смогу увидеть правый и левый текстовый дескриптор :(Я вижу только среднюю ручку выбора текста .. – loki

-1

Используйте версию на 3 параметра конструктора и передать в стиле, который вы хотите ,

+0

, но я не могу понять как использовать его EditText (контекст контекста, AttributeSet attrs, int defStyleAttr) ... у вас есть образец? Что помещать в AttributeSet и defStyleAttr? – loki

+0

Атрибут set - это набор значений атрибутов, в основном все андроид: материал из xml . Третий параметр - стиль –

0

Screen shot of text selection is here Эй локи, попробовать это, возможно, было бы полезно для вас ..... В Java файл введите ниже фрагмент кода

try { 
     Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); 
     f.setAccessible(true); 
     f.set(editEmail, R.drawable.cursor_black); // set your programmatically generated edittext in this method 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 

создать cursor_black.xml в вашей вытяжке папке.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<size android:width="2px" /> 
<solid android:color="@color/black" /> 
</shape> 

А также попытаться расширить AppCompatActivity в классе деятельности

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