0%

PHP获取当前文件所在真实路径。 一句话:dirname(__FILE__); __FILE__返回的是该文件完整路径包括文件名,dirname则去掉后面的文件名,返回路径

ContextMenu称为上下文菜单,一般在控件上长按时弹出。今天我们学习ContextMenu的用法,这里与listview相结合,先在ListView显示几个Item,然后在Item上长按,弹出一个菜单(就是ContextMenu),点击菜单上的项目,提示刚才长按的Item的Position. main.xml 里就一个ListView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView  android:id="@+id/lv"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

下面是Java代码:

package com.pocketdigi.com;

import java.util.ArrayList;


import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class main extends Activity {
     /** Called when the activity is first created. */
    ListView lv;
    ArrayAdapter Adapter;
    ArrayList arr=new ArrayList();
    //定义菜单项
    protected static final int Menu_Item1=Menu.FIRST;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv=(ListView)findViewById(R.id.lv);
        //添加ListView项
        arr.add("123");
        arr.add("234");
        arr.add("345");
        Adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, arr);
        lv.setAdapter(Adapter);
        lv.setOnCreateContextMenuListener(MenuLis);
    }
    ListView.OnCreateContextMenuListener MenuLis=new ListView.OnCreateContextMenuListener(){
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            // TODO Auto-generated method stub
            //添加菜单项
            menu.add(Menu.NONE,Menu_Item1,0,"获取position");
        }
        
    };
    //选中菜单Item后触发
    public boolean onContextItemSelected(MenuItem item){
        //关键代码在这里
        AdapterView.AdapterContextMenuInfo menuInfo;
        menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        //输出position
        Toast.makeText(main.this,String.valueOf(menuInfo.position), Toast.LENGTH_LONG).show();
         return super.onContextItemSelected(item); 
        
    }

}

在使用Gallery控件时,如果载入的图片过多,过大,就很容易出现OutOfMemoryError异常,就是内存溢出。这是因为Android默认分配的内存只有8M,而载入的图片如果是JPG之类的压缩格式,在内存中展开时就会占用大量的空间,也就容易内存溢出。这时可以用下面的方法解决:

          ImageView i = new ImageView(mContext);
          BitmapFactory.Options options=new BitmapFactory.Options();
          options.inSampleSize = 10;
          //貌似这个options的功能是返回缩略图,10即表示长和宽为原来的1/10,即面积为原来的1/100
          //缩略图可以减少内存占用
          Bitmap bm = BitmapFactory.decodeFile(lis.
                                get(position).toString(),options);
          i.setImageBitmap(bm);
          bm.recycle();
          //资源回收

更深层优化方法,见:

有时候我们的用户按返回键时并不是想要关闭Activity,比如说在文件管理器里,按返回键一般是希望返回到上层目录。我们可以通过捕获按键,再覆写的方法再修改按键功能。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            File f=new File(String.valueOf(cdir.getText()));
            File fp=new File(f.getParent());
            if(fp.canWrite()){
                showdir(f.getParent());
            }else{
                Toast.makeText(Selectdir.this, "上级文件夹不可写", 1).show();
            }     	
            return false;
        }
        return false;
    }

showdir是一个遍历目录的函数

在ListView里加入CheckBox,会导致无需点击listview的Item,只能点击CheckBox,原因是CheckBox的事件响应优先级高于List Item,所以屏蔽了ListItem的单击事件,如果需要使用OnItemClick,需要设置CheckBox的android:focusable=”false”

经过亲身试验,证实工行的国际E卡不能充值Google CheckOut。因为工行网上买入卖出美元至少要100美元,Googles要扣25美元的由帐号费用以及1美元的信用卡验证费,所以我买了126美元,充入国际E卡,经过多次实验及与95588客服沟通,始终无法支付成功,Googe提示信用卡拒绝支付。于是又把126美元换成了人民币,结果白白损失了10元人民币(汇率问题)。

Eclipse本身有代码提示功能,但是并不是所有的文件都有提示,比如说CSS。之前在Windows平台编辑CSS,PHP一直都用Dreamweaver,之所以一直用这个臃肿的家伙,就是因为它那还算不错的代码提示功能。现在换到了Ubuntu,用DW是不可能了(在Windows下就卡,如果再来Wine一下的话,难以想像)。因为之前已经安装了Eclipse,PHP全都用Eclipse写,看到新建菜单上也有CSS文件,所以就试着用Eclipse写CSS。但是用了以后才发现,Eclipse编辑css没有代码提示功能,像我等新人,没有代码提示还怎么写(安装PDT后,php代码提示已经很好用了)。于是Google了一下,看看有没有什么插件能够实现。结果还真被我找到了,一个叫Aptana的插件,安装地址:http://download.aptana.com/tools/studio/plugin/install/studio(在线安装),在Install对话框中,注意去掉Group items by category 和 Contact all update sites during install to find required software 两项。装完了重新打开CSS文件,会默认使用Aptana的编辑器,这样就完美实现了代码提示功能,一点都不比Dreamweaver差。 之前用Windows的时候,只用Eclipse写Android,从来不知道Eclipse如此强大,其实在上大学时JAVA老师就推荐我们用Eclipse,但是我们当时因为太复杂以及语言的原因都放弃了,改用盗版的Jcreator。现在用Ubuntu,加上强大的Eclipse,基本上可以摆脱Windows了。目前还有线上支付和图片处理没有解决,GIMP貌似没有类似PS的动作功能。

今天花了一天的时间,翻阅无数网站,总把把开发平台搬到ubuntu下。现在机器已经装好了php,mysql,nginx,Eclipse,android-sdk,Eclipse也装了ADT和PDT。现在Eclipse已经可以编译android源码在模拟器调试了,但是却发现,Eclipse的代码提示背景是黑色的,这样就看不到提示内容了。网上查了下,原来是跟ubuntu默认的主题有点冲突,修改一下就好了。 【解决方案】 为了解决这个问题,当然要改掉Ubuntu主题中Tooltip的背景色了。可以在下面的菜单中找到:

系统->首选项->外观->主题->自定义(是个按钮)->颜色(选项卡)->工具提示

新版的Ubuntu,换了unity界面,用上面的方法无效了,直接改主题相关文件。 默认主题是Ambiance,修改/usr/share/themes/Ambiance/gtk-2.0/gtkrc 把tooltip_fg_color和tooltip_bg_color改成自己喜欢的颜色就好了,我的是tooltip_fg_color:#000000,tooltip_bg_color:#e3c98c

感觉ubuntu默认把他们放在左上角有点不习惯,在终端运行下面的命令可以换回来 gconftool-2 –set /apps/metacity/general/button_layout –type string “menu:minimize,maximize,close” 当然,你也可以自己定义一下顺序