android 应用

ubuntu12.04  64 bit android studio

关于ubuntu下 studio 跑不起来实体机 

a、 lsusb查看设备

b、在/etc/udev/rules.d/目录下添加 50-android.rules文件

c、在当前用户根目录下.android/adb_usb.ini 或者adb_usb.ini~文件,


1、android模拟器跑不起来报

提示/root/.android下,而实际是在/user/.android下面找的,

用链接ln -s /root/.android /usr/.android即可,将其链接过去

2、报[2014-07-16 17:24:02 - andr] Launching a new emulator with Virtual Device '2'
[2014-07-16 17:24:43 - Emulator] WARNING: Data partition already in use. Changes will not persist!
[2014-07-16 17:24:44 - Emulator] WARNING: SD Card image already in use: /root/.android/avd/2.avd/sdcard.img
[2014-07-16 17:24:45 - Emulator] WARNING: Cache partition already in use. Changes will not persist!
[2014-07-16 17:24:45 - Emulator] X Error of failed request:  BadRequest (invalid request code or no such operation)
[2014-07-16 17:24:45 - Emulator]   Major opcode of failed request:  136 (GLX)
[2014-07-16 17:24:45 - Emulator]   Minor opcode of failed request:  19 (X_GLXQueryServerString)
[2014-07-16 17:24:45 - Emulator]   Serial number of failed request:  12
[2014-07-16 17:24:45 - Emulator]   Current serial number in output stream:  12

原因是64位系统

在命令行使用./emulator64-arm -avd 设备可以运行起来

4、一启动程序activity就显示输入法,让其隐藏的方法是,之需要在AndroidManifest.XML的activity里添加这一句

    <activity
            android:name="com.example.pratice.MainActivity"
            android:windowSoftInputMode="stateHidden|adjustResize"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

5、关于absolutelayout用法

 <AbsoluteLayout
             android:layout_width="fill_parent"  
                android:layout_height="fill_parent">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="40dp"        
                android:orientation="horizontal"
                android:id="@+id/viewGroup2"
                android:layout_x="100px"
                android:layout_y="100px">        
            </LinearLayout>
        </AbsoluteLayout>

里面的布局可以写绝对位置,都是相对于屏幕的左上角位置

6、关于滑动页面的编写

(关于多页,没页有监听事件的时候,只有在页改变里做个页标记位,放在finishupdate()里更新每页的监听才不会出现异常,异常出现在到最后一页然后返回前一页时,否则无论是放在instantiateItem()还是页改变里面都会出现异常)

  a、首先在主的布局文件中添加

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="450dp"  
         android:layout_marginTop="50dp"/>             
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="450dp"
        android:orientation="vertical"
         >
         <AbsoluteLayout
             android:layout_width="fill_parent"  
    android:layout_height="fill_parent">
        <LinearLayout
         android:layout_width="fill_parent"
        android:layout_height="40dp"        
        android:orientation="horizontal"
        
        android:id="@+id/viewGroup"
          android:layout_x="370px" android:layout_y="310px">
                 
        </LinearLayout>
        </AbsoluteLayout>
    </RelativeLayout>
 b、新建4个item1.xml   item2.xml    item3.xml   item4.xml用于滑动页面的显示

c、java编写代码如下

package com.example.pratice;

import java.util.ArrayList;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class MainActivity extends Activity
{
    private ViewPager viewPager;
    private ArrayList<View> list;
    private ViewGroup main,group;
    private TextView textView;
    private TextView[] textViews;
        
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        LayoutInflater inflater=getLayoutInflater();        
        list=new ArrayList<View>();
        list.add(inflater.inflate(R.layout.item1, null));
        list.add(inflater.inflate(R.layout.item2, null));
        list.add(inflater.inflate(R.layout.item3, null));
        list.add(inflater.inflate(R.layout.item4, null));
      
        textViews=new TextView[list.size()];
        ViewGroup main=(ViewGroup) inflater.inflate(R.layout.fragment_main, null);
//        groupÊÇR.layou.mainÖекÔð°ü¹üСԲµãµÄLinearLayout.
        ViewGroup group=(ViewGroup) main.findViewById(R.id.viewGroup);
        viewPager=(ViewPager)main.findViewById(R.id.viewPager);       
        for (int i = 0; i < list.size(); i++)
        {
            textView=new TextView(MainActivity.this);            
            textView.setLayoutParams(new LayoutParams(10,10));
            textView.setPadding(0, 0, 2, 0);            
            textViews[i]=textView;
            if (i==0)
            {    
//                Ä¬ÈÏœøÈë³ÌÐòºóµÚÒ»ÕÅ͌Ƭ±»Ñ¡ÖÐ;
                textViews[i].setBackgroundResource(R.drawable.radio_sel);                        
            }else {
                textViews[i].setBackgroundResource(R.drawable.radio);
            }
            group.addView(textViews[i]);            
        }
        
   
        requestWindowFeature(Window.FEATURE_NO_TITLE); //设置无标题
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏


          
        setContentView(main);       //曾经因为这一个导致怎么弄都不显示
//        setContentView(R.layout.fragment_main);
        viewPager.setAdapter(new MyAdapter());
        viewPager.setOnPageChangeListener(new MyListener());    
  
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//水平显示
//        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//垂直显示

    }
    
    class MyAdapter extends PagerAdapter{

        @Override
        public int getCount()
        {
            return list.size();
        }

        @Override
        public boolean isViewFromObject(
                View arg0, Object arg1)
        {
            return arg0==arg1;
        }

        /* (non-Javadoc)
         * @see android.support.v4.view.PagerAdapter#destroyItem(android.view.ViewGroup, int, java.lang.Object)
         */
        @Override
        public void destroyItem(
                ViewGroup container,
                int position, Object object)
        {
            ((ViewPager)container).removeView(list.get(position));            
        }

        /* (non-Javadoc)
         * @see android.support.v4.view.PagerAdapter#finishUpdate(android.view.ViewGroup)
         */
        @Override
        public void finishUpdate(
                ViewGroup container)
        {
            // TODO Auto-generated method stub
            super.finishUpdate(container);
        }

        /* (non-Javadoc)
         * @see android.support.v4.view.PagerAdapter#getItemPosition(java.lang.Object)
         */
        @Override
        public int getItemPosition(Object object)
        {
            // TODO Auto-generated method stub
            return super.getItemPosition(object);
        }

        /* (non-Javadoc)
         * @see android.support.v4.view.PagerAdapter#getPageTitle(int)
         */
        @Override
        public CharSequence getPageTitle(
                int position)
        {
            // TODO Auto-generated method stub
            return super.getPageTitle(position);
        }

        /* (non-Javadoc)
         * @see android.support.v4.view.PagerAdapter#instantiateItem(android.view.ViewGroup, int)
         */
        @Override
        public Object instantiateItem(  //viewpage里的控件必须在这里初始化,否则会程序会蹦掉
                ViewGroup container, int position)
        {
            ((ViewPager)container).addView(list.get(position));
            return list.get(position);
        }        
    }
    
  
    
    class MyListener implements OnPageChangeListener{

        @Override
        public void onPageScrollStateChanged(
                int arg0)
        {
            // TODO Auto-generated method stub
            
        }

        @Override
        public void onPageScrolled(int arg0,
                float arg1, int arg2)
        {
            // TODO Auto-generated method stub
            
        }

        @Override
        public void onPageSelected(int arg0)
        {
            for(int i=0;i<textViews.length;i++) {                
                textViews[arg0].setBackgroundResource(R.drawable.radio_sel);
                if (arg0!=i)
                {                    
                    textViews[i].setBackgroundResource(R.drawable.radio);
                }
            }
            
        }
        
    }
   
}


7、图片的实现

    <ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="100dp"
    android:scaleType="fitCenter"
    android:src="@drawable/b2"
    ></ImageView>

这里的b2之需要就爱那个图片拷贝到res/drawable文件夹下即可,就可以显示图片了


8、tablelayout使用

 <TableLayout  
            android:id="@+id/dictTable"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
             android:layout_marginTop="0dp">  
            <TableRow >  
       <Button
          android:layout_width="152dp"
          android:layout_height="120dp"
          android:text="xxx"
          android:drawableLeft="@color/red"
          android:layout_marginLeft="60dp"
          android:layout_marginTop="20dp">
          </Button>
            <Button
          android:layout_width="152dp"
          android:layout_height="120dp"
          android:text="xxx"
          android:drawableLeft="@color/red"
          android:layout_marginLeft="45dp"
          android:layout_marginTop="20dp">
          </Button>
            <Button
          android:layout_width="152dp"
          android:layout_height="120dp"
          android:text="xxx"
          android:drawableLeft="@color/red"
          android:layout_marginLeft="45dp"
          android:layout_marginTop="20dp">
          </Button>
           
            </TableRow>  
                       <TableRow >  
       <Button
          android:layout_width="152dp"
          android:layout_height="32dp"
          android:text="xxx"
          android:layout_gravity=""
          android:drawableLeft="@color/red"
          
         android:paddingTop="0px"
          android:layout_marginLeft="60dp">
          </Button>
            <Button
          android:layout_width="152dp"
          android:layout_height="32dp"
          android:text="xxx"
          android:paddingTop="0px"
          android:drawableLeft="@color/red"
          android:layout_marginLeft="45dp">
          </Button>
            <Button
          android:layout_width="152dp"
          android:layout_height="32dp"
          android:text="xxx"
          android:paddingTop="0px"
          android:drawableLeft="@color/red"
          android:layout_marginLeft="45dp">
          </Button>
          </TableRow>       
        </TableLayout>
9、button事件的响应

a、首先在主的xml里面定义button

  <Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/save"
           android:drawableLeft="@color/red">
          </Button>

b、java代码中添加

public class MainActivity extends Activity
{

public Button btn1=null;

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       
//............................此处省略************************

        btn1=(Button)findViewById(R.id.button1);
        btn1.setOnClickListener(listener);
        
    }      private OnClickListener listener =new OnClickListener()
      {
       
       @Override
       public void onClick(View v)
       {
        // TODO Auto-generated method stub
        Button btn=(Button)v;
        switch (btn.getId())
        {
         case R.id.button1:
          Toast.makeText(MainActivity.this, "按钮1被单击", Toast.LENGTH_LONG).show();
          break;
         default:
          break;
        }
        
       }

      };

}

10、手势的识别


import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class SecondActivity extends Activity  implements OnTouchListener, OnGestureListener{

    private GestureDetector mGestureDetector = new GestureDetector(this);   //在后面的onTouceEvent事件中调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.fragment_second);
TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setOnTouchListener(this); //touch使能
//        tv.setLongClickable(true);    //长按使能
        
//      mGestureDetector.setIsLongpressEnabled(true);
        tv.setClickable(true);

    }

    @Override
    public boolean onDown(MotionEvent arg0) {
        // TODO Auto-generated method stub
//         TextView tv = (TextView) findViewById(R.id.textView1);
//            tv.setText("1");
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,   //滑动之后抬起来进入这个函数,第一个参数是起点,第二个参数是终点,第三个参数是x轴的加速度,第四个参数是Y轴的加速度
            float velocityY) {
        // TODO Auto-generated method stub
         int FLING_MIN_DISTANCE = 100;    
            int FLING_MIN_VELOCITY = 200;   
            if (Math.abs((e1.getX() - e2.getX())) > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) {   
                Toast.makeText(getApplicationContext(), "hjj", Toast.LENGTH_SHORT).show();  
            }
        return false;
    }

    @Override
    public void onLongPress(MotionEvent arg0) {
        // TODO Auto-generated method stub
//         TextView tv = (TextView) findViewById(R.id.textView1);
//            tv.setText("1");
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float arg2, float arg3) {//滑动的时候进入,参数同上
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent arg0) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public boolean onSingleTapUp(MotionEvent arg0) {
        // TODO Auto-generated method stub
//         TextView tv = (TextView) findViewById(R.id.textView1);
//            tv.setText("1");
        return false;
    }
    
    public boolean onTouchEvent(MotionEvent event) {
        return false;

    }  

    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {//触动屏幕的时候首先进入这个函数,然后调用里面的函数,这里以后有时间要研究一下机会,没一次来的时候都要调用一下
        // TODO Auto-generated method stub
         return mGestureDetector.onTouchEvent(arg1);  //我们之前定义的,在这里调用
//        return false;
    }

}

11、关于从一个activity推出更新另外一个activity中的数据,其中另外一个activity中有viewpage控件

方法:重载onResume()

在onResume()中添加标记位,表明已经初始化viewpage,否则程序会蹦掉

    public void onResume()
    {
        if(a == 1)//此处在viewpage的instantiateItem中标记为1了
        {
        MyApp appState = ((MyApp)getApplicationContext());  
        int state = appState.getState();
        Button t0 = (Button)findViewById(R.id.t0);
        String i = Integer.toString(state);
        t0.setText(i);
        }
        super.onResume();
    }


public Object instantiateItem(ViewGroup container, int position)
        {

          a = 1;
        }


12、定时器的使用

a、采用Handler的postDelayed(Runnable, long) 方法
这个实现比较简单一些:
1. Handler handler=new Handler();
Runnable runnable=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2.启动计时器:
handler.postDelayed(runnable, 2000);//每两秒执行一次runnable.
3.停止计时器:
handler.removeCallbacks(runnable); //如果不移除,在本activity退出时,此定时器仍然存在,且在不断的进入

b、采用Handle与线程的sleep(long )方法
Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。
1.定义一个Handler类,用于处理接受到的Message.
Handler handler = new Handler() {
public void handleMessage(Message msg) {
//要做的事情
super.handleMessage(msg);
}
};
2.新建一个实现Runnable接口的线程类。如下:
public class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);//线程暂停10秒,单位毫秒
Message message=new Message();
message.what=1;
handler.sendMessage(message);//发送消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.在需要启动线程的地方加入下面语句:
new Thread(new MyThread()).start();

此方法也是在本avtivity退出的时候此线程仍然存在

13、禁止输入发全屏

一是在源码里进行修改。

   frameworks/base/core/java/android/inputmethodservice/InputMethodService.java 

           1、 在updateFullscreenMode(..)中,将boolean isFullscreen = mShowInputRequested && onEvaluateFullscreenMode();

                                                               改为boolean isFullscreen=false;

           2、也可以:直接修改onEvaluateFullscreenMode()的返回值为false    <自定义输入法时,可以直接重写之,就不必在源码中修改了>


二是在自己EditText的xml里加上属性

 android:imeOptions="flagNoExtractUi"

14、不同屏幕匹配

a、获取屏幕大小

    // 方法1 Android获得屏幕的宽和高    
        WindowManager windowManager = getWindowManager();    
        Display display = windowManager.getDefaultDisplay();    
        int screenWidth = screenWidth = display.getWidth();    
        int screenHeight = screenHeight = display.getHeight();    
            
        // 方法2   
        DisplayMetrics dm = new DisplayMetrics();  
        getWindowManager().getDefaultDisplay().getMetrics(dm);  
       int widthPixels = dm.widthPixels;
       int heightPixels = dm.heightPixels;
       int dpi = dm.densityDpi;
        float width=dm.widthPixels*dm.density;   
        float height=dm.heightPixels*dm.density; 
        float xdpi = dm.xdpi;
        float ydpi = dm.ydpi; 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值