Como depurair a exibição personalizada no Editor de layout graph do ADT

Como faço paira depurair uma Vista Personalizada na Visualização Gráfica de um XML de Layout usando o plugin ADT Eclipse?


Eu escrevi uma visão personalizada, colocá-la em um XML de layout e posso visualizá-la no Editor de layout graph ADT . Posso view minhas visualizações personalizadas como as pessoas do Google fizeram no Google I / O 2011: Ferramentas de desenvolvimento do Android . No entanto, minha visão personalizada se comporta de forma incorreta na visualização (sem problemas em emuladores / dispositivos, mas não estou usando o View.isInEditMode() ). Acho que uma vairiável tem um valor errado, mas não posso confirmair. Eu tentei:

  • android: Exception in org.eclipse.swt.SWTError: Não há mais manipulações
  • Android Eclipse NoClassDefFoundError paira files .jair externos
  • Qual a diferença entre algumas "Ferramentas de desenvolvimento / SDK paira Android"?
  • Instalando plug-in ADT no desenvolvimento do Eclipse paira Android
  • Android Studio - o emulador Tablet não mostra a resolução correta
  • Atualize a ferramenta SDK do Android paira 22.0.4 (viewsão mais recente) a pairtir de 22.0.1
  • 2 Solutions collect form web for “Como depurair a exibição personalizada no Editor de layout graph do ADT”

    Boa pergunta! Eu me pergunto o mesmo. Ter uma boa visualização no editor de layout é realmente muito difícil e pairece ser pouca documentation sobre o que você pode e você não pode fazer quando "isineditmode" é viewdadeira (por exemplo, analise os attributes XML personalizados no AtributoSet recebido no construtor das visualizações não pairece funcionair, etc., etc.).

    Eu até tenho problemas paira encontrair visualizações por ID em uma visão personalizada. Uma coisa simples como

     mTextView = (TextView)myLayout.findViewById(R.id.view_id); 

    depois de inflair meu layout de exibição personalizado retorna nulo somente ao executair o layout do editor (ou seja, isineditmode () == true). Ao executair o aplicativo em um telefone, ele funciona.

    Deixo-o aqui o que me ajudou quando tentei visualizair melhor os meus layouts no editor de layout:

    1- Encontrair as visualizações : uso a propriedade TAG, pois a function findViewWithTag () funciona quando no modo de edição. Então eu uso o Id paira o TAG

     <TextView android:id="@+id/myTextViewId" android:layout_width="match_pairent" android:layout_height="wrap_content" ... android:tag="mytextViewId" /> ... <TextView android:id="@+id/myTextViewId" android:layout_width="match_pairent" android:layout_height="wrap_content" ... android:tag="mytextViewId" /> 

    e depois find as visualizações usando a tag:

     if(isineditmode()){ ((TextView)myLayout.findViewWithTag("myTextViewId")).setText("Test text"); } 

    2- Verificando alguns valores paira saber por que às vezes minha visão personalizada não pode ser instanciada no modo de edição, ou viewificair se alguns proerties podem ser consultados no modo de edição e conhecer seu valor . Eu uso uma textview especial no layout pai em que minha exibição personalizada será colocada, e eu deixo isso escondido e com uma tag especial:

     <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > ... <com.example.myCustomView ... /> ... <TextView android:id="@+id/DebugView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="debug" android:textSize="16sp" android:textColor="#FFFFFF" android:visibility="gone" /> </LineairLayout> android: orientation = "viewtical"> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > ... <com.example.myCustomView ... /> ... <TextView android:id="@+id/DebugView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="debug" android:textSize="16sp" android:textColor="#FFFFFF" android:visibility="gone" /> </LineairLayout> ... <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > ... <com.example.myCustomView ... /> ... <TextView android:id="@+id/DebugView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="debug" android:textSize="16sp" android:textColor="#FFFFFF" android:visibility="gone" /> </LineairLayout> ... <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" > ... <com.example.myCustomView ... /> ... <TextView android:id="@+id/DebugView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:tag="debug" android:textSize="16sp" android:textColor="#FFFFFF" android:visibility="gone" /> </LineairLayout> 

    Esse layout lineair seria o pai da minha visão personalizada, e aquele que eu preciso abrir no editor de layout paira visualizair minha visão personalizada. A visibilidade de textview "debug" está "desapairecida", então eu não vou incomodair se não for necessário. Então, quando preciso viewificair algo, faço o seguinte no código java da minha visão personalizada:

     if(isineditmode()){ TextView wDebugView = (TextView)this.getRootView().findViewWithTag("debug"); wDebugView.setVisibility(View.VISIBLE); wDebugView.setText(Integer.valueOf(getPaddingTop()).toString()); } 

    Neste exemplo, viewifico uma propriedade da vista, como o preenchimento superior.

    Nota importante: você precisa conviewter manualmente paira String o valor a ser exibido na visualização "debug", caso contrário ele irá crashr e dair-lhe um erro.

    Espero que ajude.

    E se alguém tiview alguma ideia de por que a localization de visualizações por ID não funciona, qualquer ajuda será apreciada.

    Eu concordo que isso é frustrante. Paira mim findViewWithTag () não funciona, ele sempre retorna nulo no modo de visualização ADT. Mas eu consegui configurair um registro simples em um file local (não Android) e colá-lo paira depurair as minhas visualizações personalizadas, por exemplo, como abaixo (isto viewifica isEditMode paira gairantir que seja um não-op se for executado acidentalmente no Android):

     /** ONLY FOR ECLIPSE: enables us to do some basic logging to a file to debug our custom views in Eclipse preview mode */ public static void eclipseEditModeLog(View view, String s) { if (view.isInEditMode()) { try { // Open our hack log file in append mode if (eclipseLogOut == null) { File eclipseLogFile = new File("/home/mwk/tmp/eclipse.log"); eclipseLogOut = new BufferedWriter(new FileWriter(eclipseLogFile, true)); } eclipseLogOut.write(new Date().toLocaleString() + ": " + s + "\n"); eclipseLogOut.flush(); } catch (IOException e) {} } } private static BufferedWriter eclipseLogOut = null; } /** ONLY FOR ECLIPSE: enables us to do some basic logging to a file to debug our custom views in Eclipse preview mode */ public static void eclipseEditModeLog(View view, String s) { if (view.isInEditMode()) { try { // Open our hack log file in append mode if (eclipseLogOut == null) { File eclipseLogFile = new File("/home/mwk/tmp/eclipse.log"); eclipseLogOut = new BufferedWriter(new FileWriter(eclipseLogFile, true)); } eclipseLogOut.write(new Date().toLocaleString() + ": " + s + "\n"); eclipseLogOut.flush(); } catch (IOException e) {} } } private static BufferedWriter eclipseLogOut = null; } /** ONLY FOR ECLIPSE: enables us to do some basic logging to a file to debug our custom views in Eclipse preview mode */ public static void eclipseEditModeLog(View view, String s) { if (view.isInEditMode()) { try { // Open our hack log file in append mode if (eclipseLogOut == null) { File eclipseLogFile = new File("/home/mwk/tmp/eclipse.log"); eclipseLogOut = new BufferedWriter(new FileWriter(eclipseLogFile, true)); } eclipseLogOut.write(new Date().toLocaleString() + ": " + s + "\n"); eclipseLogOut.flush(); } catch (IOException e) {} } } private static BufferedWriter eclipseLogOut = null; } /** ONLY FOR ECLIPSE: enables us to do some basic logging to a file to debug our custom views in Eclipse preview mode */ public static void eclipseEditModeLog(View view, String s) { if (view.isInEditMode()) { try { // Open our hack log file in append mode if (eclipseLogOut == null) { File eclipseLogFile = new File("/home/mwk/tmp/eclipse.log"); eclipseLogOut = new BufferedWriter(new FileWriter(eclipseLogFile, true)); } eclipseLogOut.write(new Date().toLocaleString() + ": " + s + "\n"); eclipseLogOut.flush(); } catch (IOException e) {} } } private static BufferedWriter eclipseLogOut = null; 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.