Android開発の小さな経験


1.TextViewのgetTextSize戻り値は画素(px)単位で、
setTextSize()はsp単位である.
したがって、返された値を直接設定するとエラーが発生し、解決策は
setTextSize()の別の形式で、単位を指定できます:
setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
2.Viewから継承する場合、bitmapを描画する場合は、新しいdrawable-xdpiに画像を配置する必要があります.
を選択します.
3.テキストに下線を引く:textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 
4.scrollViewはframeLayoutから継承されているので、LayoutParamsを使用する場合はframeLayoutを使用する必要があります
5.Androidでは、(1)TCP/IP向けSocket、Server Socket(2)UDP向けDatagramSocket、DatagramPackageのいくつかのネットワークプログラミング方式がある.ここで注意しなければならないのは、Androidデバイスが通常ハンドヘルド端末であることを考慮して、IPはすべてインターネットに従って割り当てられていることです.固定ではありません.そのため、開発も一般的なインターネットアプリケーションとは少し違います.(3)直接URL用のHttpURLConnection(4)GoogleはApache HTTPクライアントを統合しており,HTTPを用いたネットワークプログラミングが可能である.HTTPに対してGoogleはAppache Http coreとhttpclientの4バージョンを統合しているので、Androidはhttpclient 3をサポートしていないことに特に注意してください.xシリーズでは、現在はMultipart(MIME)はサポートされておらず、自らhttpmimeを追加する必要がある.JAr(5)はWebサービスを使用する.AndroidはjacksonのようなオープンソースパッケージでXmlrpcとJsonrpcをサポートし、またKsoap 2でWebservice(6)を実現してWebViewビューコンポーネントを直接使用してWebページを表示することもできます.WebViewに基づいて開発され、Googleはchrome-liteベースのWebブラウザを提供しており、直接インターネットでWebページを閲覧することができます.
6.   TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
これは私たちが最もよく使う構造方法です.
float fromXDelta:このパラメータは、アニメーションの開始点が現在のViewX座標からの差を表します.
float toXDelta、このパラメータはアニメーションの終了点が現在のView X座標からの差を表す.
float fromYDelta、このパラメータはアニメーションの開始点が現在のView Y座標からの差を表す.
float toYDelta)このパラメータは、アニメーションの開始点と現在のView座標との差を表します.
viewがA(x,y)点である場合、アニメーションはB点(x+fromXDelta,y+fromYDelta)点からC点(x+toXDelta,y+toYDelta)点に移動する.
7.androidは、他のスレッドでUIスレッドにアクセスする方法をいくつか提供します.Activity.runOnUiThread( Runnable ) View.post( Runnable ) View.postDelayed( Runnable, long ) Hanlder 
AsyncTask(推奨)
         ,   TextView          
package org.unique.async;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class NetworkActivity extends Activity{
    private TextView message;
    private Button open;
    private EditText url;

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.network);
       message= (TextView) findViewById(R.id.message);
       url= (EditText) findViewById(R.id.url);
       open= (Button) findViewById(R.id.open);
       open.setOnClickListener(new View.OnClickListener() {
           public void onClick(View arg0) {
              connect();
           }
       });

    }

    private void connect() {
        PageTask task = new PageTask(this);
        task.execute(url.getText().toString());
    }

    class PageTask extends AsyncTask<String, Integer, String> {
        //         , AsyncTask.exucute()  
        ProgressDialog pdialog;
        public PageTask(Context context){
            pdialog = new ProgressDialog(context, 0);   
            pdialog.setButton("cancel", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int i) {
              dialog.cancel();
             }
            });
            pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
             public void onCancel(DialogInterface dialog) {
              finish();
             }
            });
            pdialog.setCancelable(true);
            pdialog.setMax(100);
            pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pdialog.show();

        }
        @Override
        protected String doInBackground(String... params) {

            try{

               HttpClient client = new DefaultHttpClient();
               // params[0]     url
               HttpGet get = new HttpGet(params[0]);
               HttpResponse response = client.execute(get);
               HttpEntity entity = response.getEntity();
               long length = entity.getContentLength();
               InputStream is = entity.getContent();
               String s = null;
               if(is != null) {
                   ByteArrayOutputStream baos = new ByteArrayOutputStream();

                   byte[] buf = new byte[128];

                   int ch = -1;

                   int count = 0;

                   while((ch = is.read(buf)) != -1) {

                      baos.write(buf, 0, ch);

                      count += ch;

                      if(length > 0) {
                          //          ,  publishProgress()    
                          publishProgress((int) ((count / (float) length) * 100));
                      }

                      //      100ms
                      Thread.sleep(100);
                   }
                   s = new String(baos.toByteArray());              }
               //     
               return s;
            } catch(Exception e) {
               e.printStackTrace();

            }

            return null;

        }

        @Override
        protected void onCancelled() {
            super.onCancelled();
        }

        @Override
        protected void onPostExecute(String result) {
            //   HTML     
            message.setText(result);
            pdialog.dismiss(); 
        }

        @Override
        protected void onPreExecute() {
            //     ,            ,      
            message.setText(R.string.task_started);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            //     
              System.out.println(""+values[0]);
              message.setText(""+values[0]);
              pdialog.setProgress(values[0]);
        }

     }

}

8.Spinner dialogとtabhostでは使用できない解決方法
9.eclipse関連JDKソース
(1).ポイント「window」->「Preferences」->「Java」->「Installed JRES」
(2).「Installed JRES」の右側にリスト・ペインがあり、システム内のJRE環境がリストされています.JREを選択し、エッジの「Edit...」をクリックします.ウィンドウが表示されます(Edit JRE)
(3).rt.jarファイルの項目を選択します:“c:program filesjavajre_1.5.0_06librt.jar”点の左側の“+”号で展開します.
(4).展開すると、「SourceAttachment:(none)」が表示されます.この項目をクリックし、右側のボタン「Source Attachment...」をクリックします.JDKディレクトリの下にある「src.zip」ファイルを選択します.
10.Unable to open sync connection!
設定のUSBデバッグを再起動する
11.EditTextカーソル位置設定問題EditTextにプリセットテキストがある場合、カーソルを一番前にしたいのですが、最初はsetSelection(0)を使っていましたが、サムスンP 1000に問題があることがわかりました.研究の結果、EditTextを呼び出す必要があることが分かった.requestFocus()を呼び出し、setSelection(0)を呼び出します.そうでなければ、2.xの機械に問題がありますが、3.xの上はよくなっています.
12.AndroidではHomeキーがシステムに保持する、フォールバックキーを傍受するようにonKeyDownを使用することはできないが、homeキーを押すとトリガーされるactivityやviewのイベントに応じて独自の処理コードを追加することができる.ネット上ではonAttachWindowでホームキーをブロックできると言われていますが、試したことがありません.
13.surfaceViewでレンダリングする場合、必要に応じて他のViewを表示するには、surfaceViewと他のViewをlayoutに配置し、通常は他のviewを非表示にすることができます.
14.android:imeOptinosを使用すると、Androidに付属のソフトキーボードにいくつかのインタフェースの設定を行うことができます.
android:imeOptions="flagNoExtractUi"  //         ,          
  ,                     ,           
android:imeOptions="actionNone"  //             
android:imeOptions="actionGo"    //        '  '  
android:imeOptions="actionSearch"  //           ,    
android:imeOptions="actionSend"    //        '  '  
android:imeOptions="actionNext"   //        '   '  
android:imeOptions="actionDone"  //        '  ' 

15.TextViewにシャドウを追加する
<style name="Overlay">   
    <item name="android:paddingLeft">2dip</item>   
    <item name="android:paddingBottom">2dip</item>   
    <item name="android:textColor">#ffffff</item>   
    <item name="android:textSize">12sp</item>   
    <item name="android:shadowColor">#00ff00</item>   
    <item name="android:shadowDx">5</item>   
    <item name="android:shadowDy">3</item>   
    <item name="android:shadowRadius">6</item>  
</style>  
  
<TextView android:id="@+id/test"   
       android:layout_width="fill_parent"   
       android:layout_height="wrap_content"   
       style="@style/Overlay"   
       android:text="test"   
       android:gravity="center" />  
16.
TextViewの中国語を太字にするにはどうすればいいですか? 
xmlファイルでandroid:textStyle=「bold」を使用すると、英語を太字に設定できますが、中国語を太字に設定することはできません.中国語を太字に設定する方法は、次のとおりです.
TextView tv = (TextView)findViewById(R.id.TextView01); 
TextPaint tp = tv.getPaint(); 
tp.setFakeBoldText(true);