《第一行代碼 Android》

AndroidManifest

活動注冊禀酱, 所有活動都需要在該文件中進行注冊之后才能生效。

活動的生命周期

  • onCreate()
    活動第一次被創(chuàng)建的時候調(diào)用牧嫉,這個方法中完成活動如加載布局剂跟、綁定事件的初始化操作。
  • onStart()
    活動變得可見時被調(diào)用
  • onResume()
    活動準備好和用戶進行交互的時候調(diào)用酣藻。
  • onPause()
    系統(tǒng)準備去啟動或者回復(fù)另一個活動的時候調(diào)用
  • onStop()
  • onDestroy()
  • onRestart()

特殊類

Calendar

View

Paint

Canvas

數(shù)據(jù)

持久化操作

組件收錄

View類是用戶組件的共同父類曹洽,幾乎所有用戶界面組件都是繼承View類實現(xiàn)。
'android:backgroup':設(shè)置背景顏色辽剧;
'setBackgroudColor()':對應(yīng)方法送淆;
'android:id':為組件設(shè)置可通過findViewById方法獲取的標識符;
'setId()':對應(yīng)方法怕轿;
'findViewById()':對應(yīng)方法偷崩;
'android:alpha':設(shè)置透明度,取值為0~1撞羽;
'setAlpha()':對應(yīng)方法阐斜;
'android:visibility':
控制組件的可見熟悉,可選visible(可見)放吩、invisible(不可見智听,仍然占據(jù)原來的位置與空間)、gone(表示組件不僅不可見渡紫,而且不再占用任何屏幕空間)到推;
'setVisibility()':
通過代碼通過傳入View.VISIBLE/INVISIBLE/GONE控制控件的可見性;
’getVisibility()':
獲取當(dāng)前可見性惕澎;
'android:clickable':設(shè)置組件是否響應(yīng)單擊事件莉测;

TextView

'android:text':指定TextView中顯示的文本內(nèi)容;
’android:gravity‘:來指定文字的對齊方式唧喉,可選top捣卤、bottom忍抽、left、right董朝、center等鸠项,通過’|‘來同時指定多個值表‘且’;
'android:textSIze':文字大凶咏祟绊;
'android:textColor’:文字顏色;

Button

該組件可控制的屬性與TextView差不多哥捕。系統(tǒng)會對Button中的文字自動進行大寫轉(zhuǎn)換牧抽。
'android:textAllCaps':選擇‘false’禁止大寫轉(zhuǎn)換;
‘setOnClickListener’:傳入一個實現(xiàn)了onClick()方法的對象遥赚;

EditText

允許在組件中輸入和編輯內(nèi)容扬舒,并可以在程序中對這些內(nèi)容進行處理。
'android:editable':為ture時凫佛,設(shè)置可編輯讲坎;
'android:numeric':只能輸入數(shù)字,interger(輸入數(shù)值)/signed(輸入帶符號的數(shù)值)/decimal(輸入帶小數(shù)點的數(shù)值)
'android:password':為true時御蒲,密碼輸入字符顯示為原點衣赶;
'android:phoneNumber':為true時,只能輸入電話號碼厚满;
‘a(chǎn)ndroid:hint':指定提示性文本;
'android:maxLines':規(guī)定編輯框可顯示內(nèi)容的最大行數(shù)碧磅,超出后會滾動碘箍;
’getText()‘:獲取EditText組件中輸入的內(nèi)容,不過需要通過調(diào)用toString()轉(zhuǎn)換成字符串鲸郊;

ImageView

該組件需要的圖片一般放在‘drawable'目錄中丰榴,不過該目錄未指定具體的分辨率,可以新建后綴為’-xhdpi‘的文件將圖片放于其中秆撮。

可操作的空間

‘a(chǎn)ndroid:src’:為當(dāng)前ImageView直接指定一張圖片四濒;
’setImageResource()‘:代碼動態(tài)更改ImageView中圖片的方法;

ProgressBar

‘a(chǎn)ndroid:max’:給進度條設(shè)置一個最大值职辨;
'get/setProgress()':獲取/設(shè)置當(dāng)前進度條進度盗蟆;

SeekBar

拖動條,允許用戶拖動滑塊改變值舒裤。該組件可以通過‘a(chǎn)ndroid:thumb’屬性實現(xiàn)喳资,該屬性的值為一個Drawable對象,該對象將作為自定義滑塊腾供。

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
  @Override
  public void onStopTrackingTouch(SeekBar seekBar){
    //結(jié)束滑動時候應(yīng)運行邏輯    
  }
  @Override
  public void onStartTrackingTouch(SeekBar seekBar){
    //開始滑動時候應(yīng)運行邏輯
  }
  @Override
  public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){
    //當(dāng)前進度條的值應(yīng)運行的邏輯
  }

ListView

listview用于展示大量數(shù)據(jù)仆邓,允許通過手指上下滑動的方式將屏幕外的數(shù)據(jù)滾到屏幕內(nèi)鲜滩。
一般數(shù)組中的數(shù)據(jù)無法直接傳遞給ListView,需要借助適配器完成节值,Android里面有大量的適配器的實現(xiàn)類徙硅,適配器的任務(wù)便是生成ListView中的一個個View子項目。所以適配器在這一刻的主要工作便是將回調(diào)函數(shù)getView()具體實現(xiàn)搞疗,在該回調(diào)方法中將對象中存儲的數(shù)據(jù)一項一項的傳遞給子項目布局的各個組件當(dāng)中闷游。各個適配器中較為常用的為ArrayAdapter,可以用泛型來指定要適配的數(shù)據(jù)類型贴汪,然后在構(gòu)造函數(shù)當(dāng)中將數(shù)據(jù)傳入脐往。
其次與ListView相關(guān)的運用還有ListView的子項目的點擊事件。(果然扳埂,业簿,記太多都會忘,還是看官方備注實在)

    /* 該接口的實現(xiàn)在ListView中的子項目被點擊時候回調(diào)*/
    public interface OnItemClickListener {
        /**
         * 如果需要訪問與所該子項目關(guān)聯(lián)的數(shù)據(jù)阳懂,可以通過調(diào)用getItemAtPosition(position)獲取
         * @param parent:該點擊事件對應(yīng)的AdapterView適配器對象梅尤。
         * @param view:被單擊的AdapterView中的子視圖(由適配器提供的視圖) 
         * @param position:子視圖在適配器中的位置。
         * @param id:被單擊項目的行id岩调。
         */
        void onItemClick(AdapterView<?> parent, View view, int position, long id);
    }
ArrayAdapter適配器

以ArrayAdapter適配器舉例巷燥,ArrayAdapter的構(gòu)造函數(shù)中需要依次傳入當(dāng)前上下文、ListView子項布局的id号枕、以及所適配的數(shù)據(jù)缰揪,最后調(diào)用ListView的setAdapter()方法,將構(gòu)建好的適配器對象傳遞進去葱淳,將ListView與數(shù)據(jù)聯(lián)系起來钝腺。
適配器需要定義一用于傳遞數(shù)據(jù)的適配類。
適配器的構(gòu)造函數(shù)用于將上下文赞厕,子項布局的id和數(shù)據(jù)傳遞進來艳狐。
適配器需要重寫getView(),該方法在每個子項被滾到屏幕內(nèi)時被調(diào)用皿桑,在方法中首先需要得到當(dāng)前項的實例毫目,然后使用LayoutInflater來為這個子項加載需要傳入的布局。

public class AdapterClass{
//* 定義域诲侮、構(gòu)造函數(shù)镀虐、基本getter、setter方法*//
}
public class MyAdapter extends ArrayAdapter<AdapterClass>{
//*定義額外需要的域*//
  public MyAdapter(Context context,int textViewResourceId,List<AdapterClass> objects){//textViewResourceId為子項布局id
    super(context,textViewResourceId,objects);
    //*初始化自己的域*//
  }
  @Override
  public View getView(int positon,View convertView,ViewGroup parent){//該方法為ArrayAdapter的方法浆西,其中position參數(shù)為實例在數(shù)組中的位置,convertView為上下文布局()
    AdapterClass theObject = getItem(position);
    View view  = LayoutInflater.from(getContext()).inflate(子項布局id,parent,false);//參數(shù)false表示只讓我們在父布局中聲明的layout屬性生效粉私,但不會為這個View添加父布局,因為一旦有了父布局近零,就不能再添加到ListView組件當(dāng)中诺核。
    //*獲取組件抄肖,并用適當(dāng)方法向組件中添加適配類中的數(shù)據(jù)*//
    return view;
  }
}
public class MainActivity extends AppCompatActivity{
  //*域*//
  @Override
  protected void onCreate(Bundle savedInstanceState){
    //*其它操作*//
    MyAdapter myAdapter  = new MyAdapter(MainActivity.this,R.layout.*,adpterClassList);//此處第三個參數(shù)為其它地方已經(jīng)實例化了的ArrayList對象
    //當(dāng)需要傳入的布局足夠簡單的時候可以調(diào)用庫中的已有布局,比如'android.R.layout.simple_list_item_1'便是一個簡單的TextView布局窖杀,適用于單純的字符串漓摩。
    ListView listView = (ListView) findViewById(R.id.*);
    listView.setAdapter(myAdapter);
  }
}
  
//
  private class MyAdapter extends BaseAdapter {
        // 其它方法或域
        @Override
        public View getView(int position, View convertView, ViewGroup container) {
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.list_item, container, false);
            }
  
            ((TextView) convertView.findViewById(android.R.id.text1))
                    .setText(getItem(position));
            reoturn convertView;
        }
    }

TimePicker

DatePicker

概念收錄

運行時權(quán)限

運行時權(quán)限功能在6.0之后啟用,首先運用的權(quán)限調(diào)用聲明在AndroidManifest.xml文件中入客。

所有權(quán)限中只有危險權(quán)限和特殊權(quán)限需要在運行時申請管毙,其它普通權(quán)限由系統(tǒng)自動授權(quán)。危險權(quán)限常常為會觸及用戶隱私或者對設(shè)備安全造成影響的桌硫。

危險權(quán)限一共有九組夭咬,24個權(quán)限。危險權(quán)限的授權(quán)按組進行铆隘,同一組的權(quán)限申請成功一個卓舵,則同組其它也獲權(quán)成功。

權(quán)限聲明語法:

//Android Manifest.xml中
<uses-permission android:name="android.permission.*"/>
/*危險權(quán)限除了聲明之外膀钠,6.0以上的系統(tǒng)還需要在代碼中添
加運行時權(quán)限處理掏湾,處理的內(nèi)容主要為:由用戶授權(quán)我們?nèi)?執(zhí)行某些危險操作。*/
//運行時權(quán)限聲明
/*判斷用戶是不是已經(jīng)給過授權(quán)的方法*/
ContextCompat.checkSelfPermission(*Activity.this,Manifest.permission.*)==PackageManager.PERMISSION_GRANTED
/*申請授權(quán)*/
//傳入一個需要申請權(quán)限的數(shù)值肿嘲,以及請求碼融击,供回調(diào)函數(shù)(下面重寫的那個)處理。處理結(jié)果封裝在grantResults中
ActivityCompat.requestPermissions(*Activity.this,new String[] {Manifers.permission.*,...},requestCode)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
  switch(requestCode){
    if(grantResults.length>0&&grantResults[0]==PackageManager.*)
      //*
      else
      //*
    }
  }
}

應(yīng)用收錄

選項菜單

首先在資源目錄中新建menu包雳窟,在其中新建一個main.xml文件尊浪,用于繪制菜單

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/main_item"
        android:title="@string/menu_title4"
        />
    <!--依次添加菜單項-->
</menu>

接著在需要展示選項菜單的活動中重寫兩個重要方法

public boolean onCreateOptionsMenu(Menu menu){
  //首先獲取MenuInflater對象,然后通過inflate給當(dāng)前活動創(chuàng)建菜單涩拙,語法大意為根據(jù)R.main.menu處的資源文件制定菜單际长,并將菜單項添加到menu對象中
  getMenuInflater().inflate(R.menu.*,menu);
  return turn;
}

public boolean onOptionsItemSelected(MenuItem item){
  switch(item.getItemId()){
    /*編寫各個選項被選中后應(yīng)該執(zhí)行的操作*/
  }
}

上下文菜單

上下文菜單類似于計算機上的右鍵菜單,該菜單與選項菜單不同的地方在于該菜單是長按某一項目時候調(diào)出兴泥,出現(xiàn)于上下文。

//*繪制上下文菜單虾宇,添加菜單項與菜單標題等*//
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){
  
}
//*處理菜單點擊事件*//
public boolean onContextItemSelected(MenuItem item){

}
//*在onCreate方法中調(diào)用registerForContextMenu方法搓彻,為視圖注冊上下文菜單
registerForContextMenu(<? extends View>);

對話框

  • 首先如果有需要,可以繪制對話框的布局嘱朽,按照正常文件的編寫方法進行編寫即可旭贬。若只是提示框可以不需要進行布局文件的編寫
  • 其次將對話框?qū)ο髮嵗ㄟ^調(diào)用方法對對話框進行設(shè)置
AlertDialog.Builder dialog = new AlertDialog.Builder(<? extends context>)
/*設(shè)置各個屬性*/
/*
setTitile();
setMessage();
setPositiveButton();:設(shè)置類似于確定的積極按鍵搪泳,并傳入點擊事件的對象
setNegativeButton();:設(shè)置類似于取消的消極按鍵稀轨,并傳入點擊事件的對象
setView();
*/
/*創(chuàng)建并在合適的時候展示對話框*/
dialog.create();
dialog.show();
/*取消、完成對話框*/

Android的MVC設(shè)計模式

將布局文件作為表現(xiàn)層(View)岸军,將Activity的子類作為控制層(Control)奋刽,并新建繼承了View的新類作為業(yè)務(wù)模型層瓦侮。編寫的業(yè)務(wù)模型層中含有其應(yīng)具備的屬性、行為佣谐,并且可以用于布局當(dāng)中肚吏。

繪圖

  • 創(chuàng)建一個View的子類,重寫onDraw()系統(tǒng)回調(diào)方法狭魂。
    在onDraw()方法當(dāng)中罚攀,運用畫布Canvas對象與繪筆Paint對象繪制所需要的控件,甚至可以為其賦予屬性雌澄。
  • 通過invalidate()方法可以在控制層中刷新該自定義控件的狀態(tài)斋泄。

自定義組件

該運用與繪圖中的MVC設(shè)計模式類似,

//自定義組件的類
public class MyLayout extends LinearLayout{
  public MyLayout(Context context,AttributeSet attrs){
    super(context,attrs);
    //在構(gòu)造函數(shù)中需要對標題欄布局進行動態(tài)加載镐牺,如下語句中from()方法可以構(gòu)建出一個LinearLyoutInflater對象炫掐,然后調(diào)用inflate方法可以動態(tài)加載一個布局文件,其中第一個參數(shù)是要加載的布局文件的id任柜,第二參數(shù)為給加載好的布局添加一個父布局
    LayoutInflater.from(context).infalte(R.layout.title.,this);
    }
}
//

觸摸事件

觸摸事件的核心是OnTouchListener監(jiān)聽接口中監(jiān)聽方法onTouch(View v,MotionEvent event)的實現(xiàn)卒废。

音頻文件播放

android提供MediaPlayer類播放音頻,


image.png

視頻文件播放

照相機

取景:利用Surface組件進行取景宙地,然后通過SurfaceHolder.Callback監(jiān)控取景視圖摔认,Callback接口有下面三個方法需要實現(xiàn)。

   @Override
    public void surfaceCreated(SurfaceHolder holder) {
       //用于初始化
    }

    @Override
    public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
        //當(dāng)景物發(fā)生變化時候觸動
    }

    @Override
    public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
        //釋放對象時候觸動
    }

在需要實現(xiàn)的地方實現(xiàn)如下邏輯

        /*SurfaceView監(jiān)聽圖像——常在onCreate()函數(shù)中*/
        surfaceView = findViewById(R.id.*);
        SurfaceHolder holder = surfaceView.getHolder();
        //注冊回調(diào)監(jiān)聽器
        holder.addCallback(this);
        //設(shè)置SurfaceHolder的類型        
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        /*初始化相機——常在surfaceCreated()函數(shù)中*/
        //打開系統(tǒng)相機
        Camera camera = Camera.open();
        //為相機指定一個用來顯示相機預(yù)覽畫面的SurfaceView
        camera.setPreviewDisplay(holder);
        /*設(shè)置相機取景參數(shù)——常在surfaceChanged()函數(shù)中*/
        Camera.Parameters parameters = camera.getParameters();
        //相片格式
        parameters.setPictureFormat(PixelFormat.JPEG);
        //預(yù)覽畫面的大小
        parameters.setPreviewSize(320,240);
        //設(shè)置圖片分辨率大小
        parameters.setPictureSize(320,240);
        //將參數(shù)作用于對象
        camera.setParameters(parameters);
        //開始預(yù)覽
        camera.startPreview();
        /*拍照*/
/*public final void takePicture(ShutterCallback shutter,PictureCallback raw,PictureCallback postview,PictureCallback jpeg):
 /*觸發(fā)異步圖像捕獲宅粥。相機服務(wù)將在圖像捕獲過程中啟動一
系列對應(yīng)用程序的回調(diào)参袱。快門回調(diào)發(fā)生在圖像被捕獲之后秽梅。
這可以用來觸發(fā)一個聲音抹蚀,讓用戶知道圖像已經(jīng)捕獲。原始
圖像回調(diào)發(fā)生在原始圖像數(shù)據(jù)可用的時候(注意:如果沒有可
用的原始圖像回調(diào)緩沖區(qū)或原始圖像回調(diào)緩沖區(qū)不夠大容納
原始圖像企垦,數(shù)據(jù)將為空)环壤。postview回調(diào)發(fā)生在縮放后的,
完全處理后的圖像是可用的(注意:并非所有硬件都支持此功
能)钞诡。jpeg回調(diào)在壓縮圖像可用時發(fā)生郑现。如果應(yīng)用程序不需
要特定的回調(diào),則可以傳遞null而不是回調(diào)方法荧降。
*/
        //照相接箫,同時傳入上訴說明中自身所需要的回調(diào)函數(shù)
        camera.takePicture(null,null,new jpegCallback());
        /*定義回調(diào)函數(shù)進行壓縮照片或其它操作——常作為參數(shù)傳入takePicture()函數(shù)進行回調(diào)*/
        //用壓縮相片舉例,重寫Camera.PictureCallback接口中的方法
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            //建立圖像對象
            Bitmap bitmap = BitmapFactory.decodeByteArray(data,0,data.length);
            try{
                //建立輸出流對象
                BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(path));
                //采用壓縮轉(zhuǎn)檔方法
                bitmap.compress(Bitmap.CompressFormat.JPEG,80,outStream);
                //更新緩沖流
                outStream.flush();
                outStream.close();
                //顯示拍照的圖片(此處省去imageView的聲明朵诫、賦值操作)
                imageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       

異常收錄

疑問收錄

  • 子項布局id具體為何物:
    子項布局id為作為某一組件的子項的布局id(說了個寂寞)辛友,具體表現(xiàn)為R.layout.,其中xml處的文件。
  • 安卓的文件怎么訪問剪返,根目錄在哪
    參考博客
/*返回文件系統(tǒng)上存儲用openFileOutput創(chuàng)建的文件的目錄
的絕對路徑废累。如果調(diào)用應(yīng)用程序被移動到所采用的存儲設(shè)
備邓梅,返回的路徑可能會隨著時間而改變,因此只應(yīng)該持久化
相對路徑九默。*/
getFilesDir();
/*返回主共享/外部存儲設(shè)備上的目錄的絕對路徑震放,應(yīng)用程序
可以在其中放置它所擁有的持久文件。這些文件是應(yīng)用程序
內(nèi)部的驼修,通常不作為媒體對用戶可見殿遂。*/
getExternalFilesDir("exter_test").getAbsolutePath();
//返回下載/緩存內(nèi)容目錄。
Environment.getDownloadCacheDirectory().getAbsolutePath();
//返回用戶數(shù)據(jù)目錄乙各。
Environment.getDataDirectory().getAbsolutePath()
/*返回主共享/外部存儲目錄墨礁。如果該目錄已被用戶掛載到其
計算機上,或已從設(shè)備中刪除耳峦,或發(fā)生了其他問題恩静,則當(dāng)前
可能無法訪問該目錄《卓溃可以使用getExternalStorageState()
來確定它的當(dāng)前狀態(tài)驶乾。(不要被“外部”這個詞搞糊涂了。這
個目錄可以被更好地理解為媒體/共享存儲循签。它是一個文件
系統(tǒng)级乐,可以保存相對大量的數(shù)據(jù),并在所有應(yīng)用程序之間共
享(不強制執(zhí)行權(quán)限)县匠。傳統(tǒng)上這是SD卡风科,但它也可以實現(xiàn)為
設(shè)備中的內(nèi)置存儲,與受保護的內(nèi)部存儲不同乞旦,并可以作為
計算機上的文件系統(tǒng)安裝贼穆。)*/
Environment.getExternalStorageDirectory().getAbsolutePath();
/*獲取用于放置特定類型文件的頂級共享/外部存儲目錄。這
是用戶通常放置和管理自己的文件的地方兰粉,所以您應(yīng)該小心
您在這里放置的文件故痊,以確保您不會擦除他們的文件或妨礙
他們自己的組織。(這個目錄可能還不存在玖姑,所以在使用它
之前必須確保它存在崖蜜,比如使用File.mkdirs()。)*/
7Environment.getExternalStoragePublicDirectory("pub_test")

執(zhí)行結(jié)果依次為:
getFilesDir = /data/user/0/com.example.lab_5/files
getExternalFilesDir = /storage/emulated/0/Android/data/com.example.lab_5/files/exter_test
getDownloadCacheDirectory = /cache
getDataDirectory = /data
getExternalStorageDirectory = /storage/emulated/0
getExternalStoragePublicDirectory = /storage/emulated/0/pub_test
2021-11-16 16:53:12.342 14592-146
  • Android平臺的app為什么不能隨意創(chuàng)建文件夾(本想創(chuàng)建在最容易找到地方客峭,卻被告之沒有權(quán)限)
    參考文獻
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抡柿,隨后出現(xiàn)的幾起案子舔琅,更是在濱河造成了極大的恐慌,老刑警劉巖洲劣,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件备蚓,死亡現(xiàn)場離奇詭異课蔬,居然都是意外死亡,警方通過查閱死者的電腦和手機郊尝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門二跋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人流昏,你說我怎么就攤上這事扎即。” “怎么了况凉?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵谚鄙,是天一觀的道長。 經(jīng)常有香客問我刁绒,道長闷营,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任知市,我火速辦了婚禮傻盟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫂丙。我一直安慰自己娘赴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布奢入。 她就那樣靜靜地躺著筝闹,像睡著了一般大刊。 火紅的嫁衣襯著肌膚如雪眷蜓。 梳的紋絲不亂的頭發(fā)上砾省,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天漾狼,我揣著相機與錄音舟奠,去河邊找鬼胆剧。 笑死骇塘,一個胖子當(dāng)著我的面吹牛汛闸,可吹牛的內(nèi)容都是我干的捉片。 我是一名探鬼主播平痰,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伍纫!你這毒婦竟也來了宗雇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤莹规,失蹤者是張志新(化名)和其女友劉穎赔蒲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡舞虱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年欢际,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矾兜。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡损趋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椅寺,到底是詐尸還是另有隱情浑槽,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布配并,位于F島的核電站括荡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溉旋。R本人自食惡果不足惜畸冲,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望观腊。 院中可真熱鬧邑闲,春花似錦、人聲如沸梧油。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡陨。三九已至褪子,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骗村,已是汗流浹背嫌褪。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胚股,地道東北人笼痛。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像琅拌,于是被迫代替她去往敵國和親缨伊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容